Java 使用包含多部分formdata的服务类创建JAXRSClientBean

Java 使用包含多部分formdata的服务类创建JAXRSClientBean,java,web-services,rest,jersey,cxf,Java,Web Services,Rest,Jersey,Cxf,我已经成功地使用Jersey 2.1创建了一个小型服务器,包括Jersey media multipart,以便能够上载文件 现在,我想使用ApacheCXF开发一个简单的客户机,使用与服务器相同的接口 代码 简化后,我的代码如下所示: import org.apache.cxf.interceptor.LoggingOutInterceptor; import org.apache.cxf.jaxrs.client.JAXRSClientFactoryBean; import org.glas

我已经成功地使用Jersey 2.1创建了一个小型服务器,包括Jersey media multipart,以便能够上载文件

现在,我想使用ApacheCXF开发一个简单的客户机,使用与服务器相同的接口

代码 简化后,我的代码如下所示:

import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxrs.client.JAXRSClientFactoryBean;
import org.glassfish.jersey.media.multipart.FormDataParam;

import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.StandardOpenOption;

/**
 * @author outofrange
 */
public class JaxRSClient {
    public static void main(String[] args) throws IOException {
        JAXRSClientFactoryBean bean = new JAXRSClientFactoryBean();
        bean.setServiceClass(MultipartRestService.class);
        bean.setAddress("http://www.google.at");
        bean.getOutInterceptors().add(new LoggingOutInterceptor());     

        bean.create(MultipartRestService.class).multipathRequest(Files.newInputStream(new File("pom.xml").toPath(), StandardOpenOption.READ));
    }
}

@Path("/multipart")
interface MultipartRestService {
    @POST
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    Response multipathRequest(@FormDataParam("inputStream") InputStream inputStream);

}
日志 我可以看到,CXF使用multipart/formdata作为标头中的内容类型,但是负载的格式不正确:没有边界,没有内容处置

Jul 13, 2014 3:57:43 PM org.apache.cxf.interceptor.LoggingOutInterceptor
INFORMATION: Outbound Message
---------------------------
ID: 1
Address: http://www.google.at/multipart
Http-Method: POST
Content-Type: multipart/form-data
Headers: {Content-Type=[multipart/form-data], Accept=[application/xml]}
Payload: <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.outofrange.sscce</groupId>
    <artifactId>jaxrsclient</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-rs-client</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-multipart</artifactId>
            <version>2.1</version>
        </dependency>
    </dependencies>


</project>
--------------------------------------
2014年7月13日下午3:57:43 org.apache.cxf.interceptor.LoggingOutinerCeptor
信息:出站消息
---------------------------
身份证号码:1
地址:http://www.google.at/multipart
Http方法:POST
内容类型:多部分/表单数据
标题:{Content Type=[multipart/form data],Accept=[application/xml]}
有效载荷:
4.0.0
org.outofrange.sscce
jaxrsclient
1.0-快照
org.apache.cxf
cxf rt rs客户端
3.0.0
org.glassfish.jersey.media
泽西岛媒体多部分
2.1
--------------------------------------
如果我对我的真实服务器发出请求(不仅仅是作为虚拟地址的谷歌),我会得到400个错误的请求响应。

Apache CXF是否能够自动检测jersey media multipart并创建代理