Моя компания подписалась на услугу, предлагаемую системой бронирования поездок, посредством которой они звонят нам, когда происходят какие-либо изменения в маршруте поездки. Моя задача - встать на конечную точку SOAP, чтобы принять этот обратный вызов. Я делаю это со стандартным материалом jax-ws.Внедрение мыла Webservice: обращение с аргументом комплексного объекта
Вот это основы их мыла сообщения:
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:eb="http://www.ebxml.org/namespaces/messageHeader" xmlns:swse="http://wse.sabre.com/eventing"
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wse="http://schemas.xmlsoap.org/ws/2004/08/eventing">
<soap-env:Header>
<eb:MessageHeader eb:version="1.0"
soap-env:mustUnderstand="1">
<wse:MySubscription>7TZA</wse:MySubscription>
<swse:EventTopic>WSE.QUEUE.CCC.PNRCHNG</swse:EventTopic>
</eb:MessageHeader>
<wsa:Action>http://wse.sabre.com/EventSource/notification</wsa:Action>
<wsa:MessageID>721d8dc0-1307-4b27-a48b-a9ba7f7818c7</wsa:MessageID>
<wse:Identifer>7f9aad13-a8cd-4057-8c91-89ccfad64598</wse:Identifer>
<wsa:To>http://localhost:18888/</wsa:To>
</soap-env:Header>
<soap-env:Body>
<swse:CCC.PNRCHNG>
<swse:OWNPCC>N0V3</swse:OWNPCC>
<swse:HOMEPCC>W0H3</swse:HOMEPCC>
<swse:Locator>IGLYIZ</swse:Locator>
<swse:EventTimeStamp format="yyyy-MM-dd hh:mm:ss.fffffffff">2007-10-30 11:41:32.000986</swse:EventTimeStamp>
<swse:ChangeIndicators>
<swse:Indicator name="Ticketing">
<swse:hasChanged>Y</swse:hasChanged>
</swse:Indicator>
...
</swse:CCC.PNRCHNG>
</soap-env:Body>
У меня есть функционирование SOAPHandler с getHeaders() которым реализация удовлетворения требования MustUnderstand = 1.
У меня есть @WebMethod, который успешно принимает несколько частей полезной нагрузки верхнего уровня. На самом деле это пока достаточно хорошо, но я хотел бы понять, как написать @Webmethod, который будет принимать всю полезную нагрузку как сложный объект.
У меня есть класс CCC.PNRCHNG, созданный jibx. Но как мне написать @WebMethod, чтобы принять его? Ниже приведен метод, который принимает верхние биты уровня как отдельные @WebParams (Locator все, что мне действительно нужно прямо сейчас)
@WebMethod(operationName="CCC.PNRCHNG", action="http://wse.sabre.com/EventSource/notification")
public Object onPnrEvent(
@WebParam(name="OWNPCC", targetNamespace=NS) String ownPcc,
@WebParam(name="HOMEPCC", targetNamespace=NS) String homePcc,
@WebParam(name="Locator", targetNamespace=NS) String locator
) {
try {
s_logger.info(locator);
}
catch(Exception e) {
s_logger.error(e);
}
return null;
}
Было бы неплохо, чтобы получить полную модель, чтобы любой совет был бы очень признателен.
У вас есть WSDL для этого интерфейса обратного вызова? Если это так, вы можете использовать 'wsimport' для создания поставщика услуг, в том числе' @ WebMethod', который принимает полный набор параметров объекта модели объекта. –