2016-10-26 3 views
0

Веб-сервис, который призывает нас ожидает, что мы возвратили следующий XML:Изменить 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> 

Мы используем JAX-WS, чтобы обеспечить наш веб-сервис. Ниже показано, как мы определяем наш веб-интерфейс службы:

@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 метода для:

@WebMethod() 
    public void notifySmsDeliveryReceipt(

Это потребует от вас также изменить имя методы на классе реализации (или она больше не будет компилировать).

В качестве альтернативы, вы можете просто изменить ваш @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>