2016-10-26 18 views
0

私たちは、次のXMLを返すことを期待私たちを呼び出して、Webサービス:変更JAX-WS出力の名前空間接頭辞

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:loc="http://www.csapi.org/schema/parlayx/sms/notification/v2_2/local"> 
    <soapenv:Header /> 
    <soapenv:Body> 
     <loc:notifySmsDeliveryReceiptResponse /> 
    </soapenv:Body> 
</soapenv:Envelope> 

当社は、Webサービスを提供するために、JAX-WSを使用します。以下は、我々は、Webサービスのインタフェースを定義する方法である:

@BindingType(value = javax.xml.ws.soap.SOAPBinding.SOAP11HTTP_MTOM_BINDING) 
@WebService (targetNamespace = "http://www.csapi.org/schema/parlayx/sms/notification/v2_2/local") 
@HandlerChain(file = "deliverysoaphandler.xml") 
@SOAPBinding(style = Style.DOCUMENT) 
public interface DeliveryService { 

    @WebMethod() 
    public void notifySmsReception(
      @WebParam(name = "correlator", targetNamespace = "http://www.csapi.org/schema/parlayx/sms/notification/v2_2/local") @XmlElement(required = true) String correlator, 
      @WebParam(name = "message", targetNamespace = "http://www.csapi.org/schema/parlayx/sms/notification/v2_2/local") @XmlElement(required = true) Message message 

      ) throws DeliveryException; 

} 

これは、次の戻りドキュメントを生成します。

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
    <SOAP-ENV:Header/> 
    <S:Body> 
     <ns2:notifySmsReceptionResponse xmlns:ns2="http://www.csapi.org/schema/parlayx/sms/notification/v2_2/local"/> 
    </S:Body> 
</S:Envelope> 

私たちは、文書が、呼び出し元のシステムが期待するものと同じで不可欠であるが、ので、拒否されたと思います1)名前空間が大文字にされている、2)同じ名前空間参照が繰り返されている、3)文書の途中に名前空間宣言がある。

私は、他のシステムが望んでいるものを作り出すようにJAX-WSプロバイダを説得することはできますか?

答えて

1

この説明に基づいて、名前空間が問題であるかどうかはわかりません。

サービス消費者は期待している:

<soapenv:Body> 
    <loc:notifySmsDeliveryReceiptResponse /> 
</soapenv:Body> 

異なる操作名に対する応答を示し

<S:Body> 
     <ns2:notifySmsReceptionResponse xmlns:ns2="..."/> 
    </S:Body> 

を受信して​​います。また、実装クラスにメソッド名を変更するにはあなたが必要になります(または、それがコンパイルされません)そう

@WebMethod() 
    public void notifySmsDeliveryReceipt(

はにあなたのサービスエンドポイントインタフェースWebMethodメソッド名を変更してみてください。

また、あなたはまた、単に変更することができ、あなたの希望/指示された操作名に@WebMethod

@WebMethod (operationName="notifySmsDeliveryReceipt") 
public void notifySmsReception(

サービスは今生成する必要があります:

<S:Body> 
     <ns2:notifySmsDeliveryReceiptResponse xmlns:ns2="http://www.csapi.org/schema/parlayx/sms/notification/v2_2/local"/> 
    </S:Body> 
関連する問題