我正在开发一个弹簧启动SOAP Web服务客户端,该客户端调用SOAP服务,并且该SOAP服务返回带有附件的响应正文。附件将是MTOM附件。
使用我的代码,我可以读取SOAP Web服务响应正文,但无法获取附件内容。
我正在使用Spring Boot 1.5.2,我的配置如下所示。
@Bean(name="myMarshaller")
public Jaxb2Marshaller myMarshaller() {
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setPackagesToScan(new String[] {"com.mypack.header",
"com.soapservice.schema",
"com.soapservice.exception"});
marshaller.setMtomEnabled(true);
return marshaller;
}
@Bean(name = "myAppJaxbContext")
public JAXBContext myAppJaxbContext() throws XmlMappingException
{
return myMarshaller().getJaxbContext();
}
@Bean(name = "messageFactory")
public SaajSoapMessageFactory messageFactory()
{
return new SaajSoapMessageFactory();
}
@Bean(name = "myAppWSTemplate")
public WebServiceTemplate myAppWSTemplate() throws SOAPException
{
WebServiceTemplate webServiceTemplate = new WebServiceTemplate();
webServiceTemplate.setMessageFactory(messageFactory());
webServiceTemplate.setCheckConnectionForFault(false);
webServiceTemplate.setCheckConnectionForError(false);
webServiceTemplate.setUnmarshaller(myMarshaller());
webServiceTemplate.setMarshaller(myMarshaller());
return webServiceTemplate;
}
SOAP服务响应
<mySoapResponse xmlns:e="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xop="http://www.w3.org/2004/08/xop/include" xmlns:dime="http://schemas.xmlsoap.org/ws/2002/04/reference/" xmlns:fn40="http://www.filenet.com/soapservice/schema" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:d="http://www.w3.org/2001/XMLSchema">
<FiledetailResponse retrievalName="myapp.pdf" totalSize="177712">
<Content>
<Binary>
<xop:Include href="cid:v1-1234abc@mtom.p128ae.myapp.com"/>
</Binary>
</Content>
</FiledetailResponse>
</mySoapResponse>
通过上面的响应主体,我将获得一个附件作为MIME类型。但是,当尝试解组此响应正文时,content.getBinary()将始终为空。但是当我打印SOAP响应时,我可以看到附件二进制文件。
我在配置中缺少什么吗?对于多部分SOAP的Spring Boot Web服务客户端是否有任何示例。