Spring-WS中的文档特别关注这个主题,它实际上很容易添加SOAP附件。我会做出一些假设:
- 你的WSDL正确指定
mime:multipartRelated
上
- 我们将使用SAAJ SOAP消息厂
附件驻留在MimeContainer上输出消息SOAP消息。为了获得这个容器,我们需要手动构建SOAP响应,只是它的一部分。这样做看起来是这样的:
SaajSoapMessageFactory factory = new SaajSoapMessageFactory(
javax.xml.soap.MessageFactory.newInstance());
SaajSoapMessage message = factory.createWebServiceMessage();
现在,我们需要为我们的画面中的DataHandler:
DataHandler handler = new DataHandler(
new URLDataSource(
Service.class.getResource("coffee.jpg")));
message.addAttachment("picture", handler);
好吧,内容:检查,消息:检查,HM,仍然需要得到响应走出去。这里最棘手的部分是,我们需要在MessageContext
带来这样我们就可以设置此特定消息是我们有应对的一个,我们通过编辑我们的getCoffee
定义:
public Coffee getCoffee(@RequestPayload Order order, MessageContext context)
把它一起:
@Endpoint
public class Service{
private SaajSoapMessageFactory saajMessageFactory; // dependency inject this
@PayloadRoot(namespace = "http://foo.com/coffee", localPart = "order")
@ResponsePayload
public Coffee getCoffee(@RequestPayload Order order, MessageContext context){
DataHandler handler = new DataHandler(
new URLDataSource(
Service.class.getResource("coffee.jpg")));
SaajSoapMessage message = saajMessageFactory.createWebServiceMessage();
message.addAttachment("picture", handler);
context.setResponse(message);
return new Coffee("Hot Joe");
}
public void setSaajMessageFactory(SaajMessageFactory saajMessageFactory){
this.saajMessageFactory = saajMessageFactory;
}
public SaajMessageFactory getSaajMessageFactory(){
return saajMessageFactory;
}
}
良好的措施,这里的豆依赖注入获得一个SaajMessageFactory
:
<bean id="soapMessageFactory" class="javax.xml.soap.MessageFactory" factory-method="newInstance" />
<bean id="saajMessageFactory" class="org.springframework.ws.soap.saaj.SaajSoapMessageFactory">
<constructor-arg ref="soapMessageFactory" />
</bean>
<bean id="myService" class="Service">
<property name="saajMessageFactory" ref="saajMessageFactory" />
</bean>
是否有可能将响应作为JAXB对象返回? – ziggy
@ziggy:这就是这已经在做什么,不是? –
我似乎遇到了上述方法的问题。看到这个链接http://stackoverflow.com/questions/11430527/spring-ws-web-service-adding-an-attachment-to-the-response-using-saaj-no-adap – ziggy