Hallo, ich arbeite in Upload-API in meinem Projekt. Ich bin in der Lage, Daten zu senden und Antwort mit Jersy Client zu erhalten.Wie man multipart/formData im Upload-Datei-Post-Aufruf im Apache-CXF-Client sendet?
Ich bekomme 200 als Antwort. Hier ist dieser Code.
final Client client = ClientBuilder.newBuilder().register(MultiPartFeature.class).build();
client.register(new LoggingFilter());
FileDataBodyPart filePart = new FileDataBodyPart("file", new File("/Users/rasaminathan/Desktop/test.txt"));
FormDataMultiPart formDataMultiPart = new FormDataMultiPart();
FormDataMultiPart multipart = (FormDataMultiPart) formDataMultiPart.field("param1", "paramValue")
.field("param2", "value")
.bodyPart(filePart);
final WebTarget target = client.target("http://URL:8000/apiPath");
final Response response = target.request().post(Entity.entity(multipart, multipart.getMediaType()));
Und das ist das Protokoll, das ich bekam.
Jul 22, 2016 12:15:14 PM org.glassfish.jersey.filter.LoggingFilter log
INFO: 1 * Sending client request on thread main
1 > POST http://URL:8000/apiPath
1 > Content-Type: multipart/form-data
Jul 22, 2016 12:15:15 PM org.glassfish.jersey.filter.LoggingFilter log
INFO: 1 * Client response received on thread main
1 < 200
1 < Content-Length: 203
1 < Content-Type: application/json
1 < Date: Fri, 22 Jul 2016 06:45:14 GMT
1 < X-Powered-By: Servlet/2.5 JSP/2.1
Aber in meinem Projekt sollen wir CXF verwenden. Ich habe das gleiche mit CXF Webclient versucht. Aber ich bekomme "401" Unauthorized Error. Hier ist der Code.
WebClient client = WebClient.create("http://URL:8000");
String path = "apiPath";
client.type(MediaType.MULTIPART_FORM_DATA)
.path(path);
ClientConfiguration config = WebClient.getConfig(client);
config.getInInterceptors().add(new LoggingInInterceptor());
config.getOutInterceptors().add(new LoggingOutInterceptor());
List<Attachment> atts = new LinkedList<Attachment>();
atts.add(new Attachment("file", "application/octet-stream", new ByteArrayInputStream("testContent".getBytes())));
atts.add(new Attachment("param1","text/plain","paramValue"));
atts.add(new Attachment("param2","text/plain","value"));
MultipartBody body = new MultipartBody(atts);
Response response= client.post(body);
Und das ist das Protokoll, das ich habe.
Jul 22, 2016 12:23:41 PM org.apache.cxf.interceptor.LoggingOutInterceptor
INFO: Outbound Message
---------------------------
ID: 1
Address: http://URL:8000/apiPath
Http-Method: POST
Content-Type: multipart/form-data; boundary="uuid:14597725-d376-4643-92f9-7a4a64ae1054"
Headers: {Accept=[*/*]}
Payload: --uuid:14597725-d376-4643-92f9-7a4a64ae1054
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
Content-ID: <file>
testContent
--uuid:14597725-d376-4643-92f9-7a4a64ae1054
Content-Type: text/plain
Content-Transfer-Encoding: binary
Content-ID: <param1>
paramValue
--uuid:14597725-d376-4643-92f9-7a4a64ae1054
Content-Type: text/plain
Content-Transfer-Encoding: binary
Content-ID: <param2>
value
--------------------------------------
Jul 22, 2016 12:23:42 PM org.apache.cxf.interceptor.LoggingInInterceptor
INFO: Inbound Message
----------------------------
ID: 1
Response-Code: 401
Encoding: UTF-8
Content-Type: text/html; charset=UTF-8
Headers: {Content-Length=[46], content-type=[text/html; charset=UTF-8], Date=[Fri, 22 Jul 2016 06:53:42 GMT], X-Powered-By=[Servlet/2.5 JSP/2.1]}
--------------------------------------
Ich denke, die Params "Param1, Param2" Werte nicht richtig gesendet. Deshalb erhalte ich 401 Fehler, denke ich. Sendet ich Daten im CXF Webclient korrekt? Wenn nicht, bitte helfen Sie mir, den Code zu korrigieren