2011-06-22 11 views
5

私は、コンテンツを共有するように設計されたWebサービスサーバーを構築しています。私は、添付ファイルを含むSOAP応答を通じてコン​​テンツを提供したいと思います。今、Spring WSを使用して要求を処理し、応答を提供しています。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"); 
    } 

} 

をしかし、私は、私はそれを行うか、どのように応答にコーヒーカップの画像を添付したいと?

edit:Spring-WSに付属している例では、クライアントを使って添付ファイルを送信する方法を示していますが、サーバーがどのように応答するかはわかりません(これは私がここで尋ねています)。

答えて

13

Spring-WSのドキュメントは特にこのトピックでは軽いですが、実際にはSOAP添付ファイルを追加するのはかなり簡単です。あなたのWSDLを正しく我々は

添付ファイルがMimeContainer上に存在SAAJ SOAPメッセージファクトリを使用するつもり出力メッセージ

  • mime:multipartRelatedを指定

    1. :私はいくつかの仮定をします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> 
      
  • +0

    レスポンスをJAXBオブジェクトとして返すことは可能ですか? – ziggy

    +0

    @ziggy:これはすでにこれが何をしているのですか? –

    +0

    私は上記の方法に問題があるようです。このリンクを参照してくださいhttp://stackoverflow.com/questions/11430527/spring-ws-web-service-adding-an-attachment-to-the-response-using-saaj-no-adap – ziggy

    関連する問題