2013-03-15 38 views
1

我們正在創建一個來自WSDL的web服務,其中soap消息在請求和響應中同時包含標題和正文。你怎麼能設置這個與Spring WS一起工作?我找不到任何例子?包含頭部和身體信封的Spring Web服務

在WSDL

<wsdl11:message name="createCourseSectionRequest"> 
<wsdl11:part name="Parameters" element="tns:createCourseSectionRequest"/> 
<wsdl11:part name="HeaderInfoParameters" element="tns:imsx_syncRequestHeaderInfo"/> 
</wsdl11:message> 
<wsdl11:message name="createCourseSectionResponse"> 
<wsdl11:part name="Response" element="tns:createCourseSectionResponse"/> 
<wsdl11:part name="HeaderInfoResponse" element="tns:imsx_syncResponseHeaderInfo"/> 
</wsdl11:message> 

端點

@PayloadRoot(localPart="CreateCourseSectionRequest", namespace="") 
    @ResponsePayload 
    public CreateCourseSectionResponse createCourseSection(CreateCourseSectionRequest req) { 

     //TODO 
     return null; 
    } 

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ims="http://www.imsglobal.org/services/lis/cmsv1p0/wsdl11/sync/imscms_v1p0"> 
    <soapenv:Header> 
     <ims:imsx_syncRequestHeaderInfo> 
     <ims:imsx_version>?</ims:imsx_version> 
     <ims:imsx_messageIdentifier>?</ims:imsx_messageIdentifier> 
     <!--Optional:--> 
     <ims:imsx_sendingAgentIdentifier>?</ims:imsx_sendingAgentIdentifier> 
     </ims:imsx_syncRequestHeaderInfo> 
    </soapenv:Header> 
    <soapenv:Body> 
     ..... 
    </soapenv:Body> 
</soapenv:Envelope> 
+0

你在這方面有什麼進展或你需要幫助嗎? – Neel 2013-03-17 22:04:59

+0

仍然需要幫助,看起來像一個選項是使用攔截器併發送端點方法中的標題信息,不確定。 – 2013-03-18 17:35:30

+0

是的 - 這是一種方法。您可以創建一個擴展EndpointInterceptor的類,並且可以重寫handleRequest和handleResponse方法來添加處理標題信息的自定義邏輯。 (對不起,如果答案太抽象了(通勤)我可以添加更多信息,如果你不能繼續) – Neel 2013-03-18 18:35:45

回答

0

這裏是我想出的溶液。它可以工作,但我希望Soap消息的頭部部分是強類型的。在Java中,.NET爲你處理這件事,它看起來像你必須做更多的工作來爲頭部複製強類型的對象。至少我可以使用MessageContext訪問信封的請求/響應頭。

@PayloadRoot(localPart="readCourseSectionRequest", namespace="http://www.imsglobal.org/services/lis/cmsv1p0/wsdl11/sync/imscms_v1p0") 
    @ResponsePayload 
    public ReadCourseSectionResponse readCourseSection(@RequestPayload ReadCourseSectionRequest parameters, MessageContext messageContext) { 

     //SaajSoapMessage response = (SaajSoapMessage) messageContext.getResponse(); 
     //SoapHeader header = response.getSoapHeader(); 
     //header.addHeaderElement(new QName("http://www.w3.org/2005/08/addressing", "MessageID", parameters.getSourcedId())); 

     return new ReadCourseSectionResponse(); 
    }