我正在尝试测试RESTful服务,该服务配置为使用soapui工具使用multipart / mixed。
@POST
@Path("requestXmlAndAttachment")
@Consumes({ "multipart/mixed" })
@Produces({ MediaType.APPLICATION_XML })
public ResponseTO processRequestXmlAndAttachment(final com.sun.jersey.multipart.MultiPart multiPartRequest) {
// application logic
}
在SOAPUI中,我设置了REST资源并添加了2个参数,第一个文件指向请求xml,第二个文件包含数据(我从下拉列表选择了PLAIN样式)。
File1 file:request.xml
File2 file:datafile.xls
在SOAPUI请求编辑器窗口中,我选择了multipart / mixed for media type。当我向服务器提交请求时,我没有看到文件附加到请求。以下是可在服务器日志中查看的内容:
Feb 7, 2013 1:36:58 PM com.sun.jersey.api.container.filter.LoggingFilter filter
INFO: 56 * Server in-bound request
56> POST http://localhost:7001/myservice/requestXmlAndAttachment
56 > Accept-Encoding: gzip,deflate
56 > Content-Type: multipart/mixed
56 > Content-Length: 0
56 > Host: localhost:7001
56 > Connection: Keep-Alive
56 > User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
56 >
正如您所看到的,Content-Length为0 我已经能够从java junit程序测试这个服务。这是该计划的一部分:
BodyPart bp1 = new BodyPart();
bp1.setEntity(requestXMLString);
bp1.setMediaType(MediaType.APPLICATION_XML_TYPE);
BodyPart bp2 = new BodyPart();
bp2.setContentDisposition(ContentDisposition.type("file").fileName("datafaile.xls").build ());
bp2.setEntity(binaryData1);
bp2.setMediaType(MediaType.APPLICATION_OCTET_STREAM_TYPE);
MultiPart multiPart = new MultiPart().bodyPart(bp1).bodyPart(bp2);
ClientConfig cc = new DefaultClientConfig();
cc.getClasses().add(MultiPartWriter.class);
Client client = Client.create(cc);
WebResource webResource = client.resource ("http://localhost:7001/myservice/requestXmlAndAttachment");
ClientResponse response = webResource.type(new MediaType("multipart", "mixed")).post(ClientResponse.class, multiPart);
我还尝试在SOAP UI请求编辑器框中将媒体类型更改为multipart / formdata(仅用于实验),然后我可以看到Content-Length = 30654,我看到在服务器日志中读取的文件内容。
我还尝试在请求中添加http标头(MIME-Version等),但它没有任何区别。
虽然我可以在没有SOAPUI的情况下进行单元测试,但我更倾向于让这个测试与SOAPUI一起使用,因为我已经在soapui中设置了一堆其他测试设置,在同一服务中执行不同的方法。
是否有使用SOAP UI测试multipart /与附件混合?
提前感谢您的回顾。