Я использую веб-службу поставщика. Создал классы, используя JDK6 wsimport для поставщика WSDL. Теперь я пытаюсь вызвать веб-службу, используя простой клиентский класс Java, и получаю это исключение с ответом.
неожиданный тег XML. ожидается: {http://www.abcd.com/addressValidation/}validateAddressResponse, но найдено: {} валидатеаддрессответ
Поставщик говорит, что попробуйте использовать классы, сгенерированные Apache Axis, все работает нормально. Я заметил, что JaxWS автоматически добавляет/привязывает пространство имен к каждому элементу в запросе и также ожидает пространства имен в элементе ответа.
Сгенерированный интерфейс
@WebService(name = "AddressStandardize", targetNamespace = "http://www.abcd.com/addressValidation/")
@XmlSeeAlso({
com.abcd.ObjectFactory.class
})
public interface AddressStandardize {
@WebMethod(action = "http://www.abcd.com/standardizeAddress")
@RequestWrapper(localName = "validateAddress", targetNamespace = "", className = "com.abcd.ValidateAddress")
@ResponseWrapper(localName = "validateAddressResponse", targetNamespace = "", className = "com.abcd.ValidateAddressResponse")
public void standardizeAddress(
...
...
...
);
}
Я предполагаю, что Jax-WS добавляет это целевое пространство имен как к элементам validateAddress, так и к элементам validateAddressResponse.
Как избежать привязки целевого пространства имен к элементу validateAddressResponse, чтобы он не ожидал обратного ответа. Пожалуйста, помогите!
Jax WS сгенерировал запрос:
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Header>
<ns2:id xmlns:ns2="http://www.abcd.com/addressValidation/">PSA</ns2:id>
</S:Header>
<S:Body>
<ns2:validateAddress xmlns:ns2="http://www.abcd.com/addressValidation/">
<arg1>
<addresslineone>126 corbin st</addresslineone>
<addresslinetwo/>
<addresslinethree/>
<city>jersey city</city>
<state>NJ</state>
<postalcode/>
<country/>
<isocountrycode>US</isocountrycode>
</arg1>
</ns2:validateAddress>
</S:Body>
</S:Envelope>
Обратный ответ:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xyz="http://www.abcd.com/xyz">
<soapenv:Header xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xyz:id>PSA</xyz:id>
</soapenv:Header>
<soapenv:Body xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<validateAddressResponse xsi:noNamespaceSchemaLocation="addressValidation.xsd">
<validateAddressReturn>
...
...
...
</validateAddressReturn>
<ResponseStatus>
<StatusCode>SUCCESS</StatusCode>
</ResponseStatus>
</validateAddressResponse>
</soapenv:Body>
</soapenv:Envelope>
Этот ответ приходит с этим исключением... неожиданный тег XML. ожидается: {http://www.abcd.com/addressValidation/}validateAddressResponse, но найдено: {} валидатеаддрессответ