2016-03-28 13 views
0

Şirketim, bir seyahat planında herhangi bir değişiklik meydana geldiğinde bizi geri arayacakları bir seyahat rezervasyon sistemi tarafından sunulan bir servise abone olmuştur. Benim görevim, bu geri bildirimi kabul etmek için SOAP bir uç noktaya dayanmaktır. Bunu standart jax-ws şeyleriyle yapıyorum.Soap Webservice Uygulaması: Karmaşık nesne argümanı kullanımı

İşte onların sabun mesajının şartları geçerli:

<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> 

Bir GetHeaders ile işleyen SOAPHandler (var) uygulaması wich mustUnderstand = 1 şartını tatmin edici oluyor.

Yüklemenin en üst düzey bölümlerinden birkaçını başarıyla kabul eden bir @WebMethod sahibim. Bu aslında şu an için yeterince iyi, ancak tüm yükü karmaşık bir nesne olarak kabul edecek bir @Webmethod'un nasıl yazılacağını anlamak istiyorum.

Jibx tarafından üretilen CCC.PNRCHNG sınıfım var. Ama bunu kabul etmek için @WebMethod'u nasıl yazarım? Aşağıda ayrı @WebParams gibi üst düzey bitleri kabul yöntemi (Locator Gerçekten şu anda ihtiyacımız olan)

@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; 
} 

O kadar herhangi bir tavsiye çok orada mutluluk duyacağız tam modeli almak güzel olurdu olduğunu.

+0

Bu geri arama arabirimi için bir WSDL'niz var mı? Eğer öyleyse, bir hizmet sağlayıcısı oluşturmak için 'wsimport' kullanabilirsiniz, tam karmaşık tip nesne modeli giriş param (ler) ini kabul eden bir' @ WebMethod' dahil. –

cevap

0

En iyi yöntem wsimport ile WSDL tabanlı PortType oluşturmaktır. WSDL'niz yoksa sarılı bir JAX-WS hizmeti yazmaktan rahatsız olmazdım.

Sınıfınızla On

,

@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE) 

Sonra kök öğeyi kabul yöntemleri yazmak bu açıklama ekle. Şunlar gibi:

@WebMethod(operationName="CCC.PNRCHNG", action="http://wse.sabre.com/EventSource/notification") 
public Object onPnrEvent(@WebParam(name="CCC.PNRCHNG", targetNamespace=NS) PNRCHNG request) { 

} 
İlgili konular