2013-03-15 2 views
1

Мы создаем веб-сервис, который поступает из WSDL, который мыльное сообщение имеет как заголовок, так и тело в запросе и ответе. Как вы можете настроить это для работы с Spring WS? Я не могу найти примеров ????Spring Web Service с заголовком и корпусом в конверте

В 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

+0

По-прежнему нужна помощь, выглядит как опция - использовать перехватчик и отправлять информацию заголовка в методе конечных точек, не уверен. –

+0

Да, это подход. Вы можете создать класс, который расширяет EndpointInterceptor, и вы можете переопределить методы handleRequest и handleResponse, чтобы добавить свою собственную логику, которая обрабатывает информацию заголовка. (Извините, если ответ слишком абстрактный. (В коммутируемой сети). Я могу добавить дополнительную информацию, если вы не можете продолжить) – Neel

ответ

0

Вот решение я придумал. Он работает, но мне хотелось бы, чтобы заголовочная часть сообщения Soap была строго типизирована. .NET позаботится об этом для вас, в то время как в Java похоже, что вам нужно больше работать для репликации строго типизированного объекта для заголовка. По крайней мере, я могу получить доступ к заголовку запроса/ответа конверта с 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(); 
    } 
Смежные вопросы