Jersey Rest 客户端到 Apache CXF 客户端的转换

Jersy Rest client to Apache CXF client Conversion

我需要消耗上传文件API。我使用 Jersy 创建了客户端,它给了我正确的响应。这是示例代码:

final Client client = ClientBuilder.newBuilder().register(MultiPartFeature.class).build();
FileDataBodyPart filePart = new FileDataBodyPart("file", new File("somePath/fileName.txt"));
FormDataMultiPart formDataMultiPart = new FormDataMultiPart();
FormDataMultiPart multipart = (FormDataMultiPart) formDataMultiPart.field("someField", "001").bodyPart(filePart);
final WebTarget target = client.target("http://serverUrl.com:8000/cq5/uploadApi");
final Response response = target.request().post(Entity.entity(multipart, multipart.getMediaType()));

但是在我的项目中我应该使用CXF,我试图用CXF 实现同样的事情。这是我试过的。

String path = "/uploadApi";
WebClient topicWebClient = WebClient.fromClient(webClient, true)
        .type(MediaType.MULTIPART_FORM_DATA).path(path);
ContentDisposition cd = new ContentDisposition("attachment;filename=fileName.txt");
Attachment att = new Attachment("file", new ByteArrayInputStream("testContent".getBytes()), cd);
final Response response = topicWebClient.post(att);

但是我在这里没有得到任何回应。它继续加载。即使在我的日志中也没有收到任何错误。

我错过了什么吗?请帮助我得到正确的回应。

[在评论中回答]

服务器正在向 CXF 客户端响应 401-Unauthorized,因此这是一个身份验证问题。与Jersey客户端比较后,需要在请求头中添加服务器需要的凭据。

这些字段不在CXF的头部,所以可能是这个原因。在配置 CXF WebClient 时添加它们。

webClient.header(name,value)