如何在Spring-WS中将附件添加到响应有效负载?

| 我正在构建旨在共享内容的Web服务服务器。我想通过包含附件的SOAP响应来提供内容。现在,我正在使用Spring WS处理请求并提供响应。 我的服务类似于以下内容:
@Endpoint
public class Service{

    @PayloadRoot(namespace = \"http://foo.com/coffee\", localPart = \"order\")
    @ResponsePayload
    public Coffee getCoffee(@RequestPayload Order order){
        return new Coffee(\"Hot Joe\");
    }

}
但是,假设我想在响应中附加一杯咖啡的图片,该在哪里以及如何执行? 编辑:顺便说一句,Spring-WS附带的示例显示了如何使用客户端发送附件,但是没有显示服务器如何响应附件(这就是我在这里要问的)。     
已邀请:
        Spring-WS中的文档对此主题特别关注,并且添加SOAP附件实际上非常容易。我将做一些假设: 您的WSDL正确在输出消息上指定了“ 1” 我们将使用Saaj SOAP消息工厂 附件驻留在SOAP消息的MimeContainer中。要获得此容器,我们需要手动构造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);
好的,内容:检查,消息:检查,嗯,仍然需要得到响应才能出去。这里最棘手的部分是,我们需要引入
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;
    }

}
很好的方法是,这里是获得ѭ8beans的bean依赖项注入:
<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>
    

要回复问题请先登录注册