Мой клиент веб-сервиса jax-ws возвращает только пустые объекты

У меня есть сторонний веб-сервис, для которого я создаю клиента с помощью wsimport. Каждый вызов веб-службы завершается успешно, но все поля возвращаемого мной объекта ответа равны нулю. Наблюдая за сетью, я вижу, что по сети все элементы XML в ответном сообщении имеют в себе значения, поэтому в объекте должны быть ненулевые данные. Кроме того, клиент для той же службы, созданный с помощью старой оси 1 и вызванный с теми же данными, возвращает непустой ответ. Есть идеи, что происходит? (В случае, если это имеет значение, я использую реализацию JAXB в MOXy.)

Обновление : Я смог сузить круг вопросов. Wsdl определяет объект в своем собственном пространстве имен, скажем http://www.acme.com/ws . Я получаю от службы ответ

<?xml version="1.0" encoding="UTF-8"?>
... SOAP envelope ...
<ns1:opINFOWLResponse xmlns:ns1="http://www.acme.com/ws" 
 xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ns1:responseINFOWL xsi:type="ns1:responseINFOWL">
<result>6003</result>
<ndserr/>
<transid>61437594</transid>
<descriptionerr>BLAH.</descriptionerr>
</ns1:responseINFOWL>
</ns1:opINFOWLResponse>
... SOAP closing tags ...

и немаршалируется в ненулевой OpINFOWLResponse , который оборачивается вокруг ненулевого объекта responseINFOWL со всеми полями, установленными в null. Ради удовольствия я попытался написать пару строк, чтобы демаршалировать приведенный выше фрагмент (после удаления служебных данных SOAP)

JAXBContext ctx = JAXBContext.newInstance(OpINFOWLResponse.class);
Unmarshaller u = ctx.createUnmarshaller();

OpINFOWLResponse o = (OpINFOWLResponse) u.unmarshal(new StringReader(theSnippetAbove));
ResponseINFOWL w = o.getResponseINFOWL();

, и получил тот же результат. Если я изменю приведенный выше XML на

<?xml version="1.0" encoding="UTF-8"?>
<ns1:opINFOWLResponse xmlns:ns1="http://www.acme.com/ws" 
 xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ns1:responseINFOWL xsi:type="ns1:responseINFOWL">
<ns1:result>6003</ns1:result>
<ns1:ndserr/>
<ns1:transid>61437594</ns1:transid>
<ns1:descriptionerr>BLAH.</ns1:descriptionerr>
</ns1:responseINFOWL>
</ns1:opINFOWLResponse>

, все будет работать нормально. Облом.

Обновление (снова) : Такое же поведение с jaxb-RI и Moxy. Все еще не знаю, что не так.

Обновление (9 сентября) : Предложение ниже о неправильной квалификации пространства имен интересно, но я предполагал, что wsimport все исправит. В любом случае, это мой package-info.java

@XmlSchema(
namespace = "http://www.acme.com/ws", 
elementFormDefault = XmlNsForm.QUALIFIED)
package it.sky.guidaTv.service.remote;

import javax.xml.bind.annotation.XmlSchema;
import javax.xml.bind.annotation.XmlNsForm;

, и это соответствующая часть класса ResponseINFOWL

/*
 * <p>Java class for responseINFOWL complex type.
 * 
 * <p>The following schema fragment specifies the expected content contained within this class.
 * 
 * <pre>
 * &lt;complexType name="responseINFOWL">
 *   &lt;complexContent>
 *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *       &lt;sequence>
 *         &lt;element name="result" type="{http://www.w3.org/2001/XMLSchema}string"/>
 *         &lt;element name="descriptionerr" type="{http://www.w3.org/2001/XMLSchema}string"/>
 *         &lt;element name="transid" type="{http://www.w3.org/2001/XMLSchema}string"/>
 *         &lt;element name="ndserr" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
 *         &lt;element name="wallet" type="{http://www.acme.com/ws}t_wallet" minOccurs="0"/>
 *       &lt;/sequence>
 *     &lt;/restriction>
 *   &lt;/complexContent>
 * &lt;/complexType>
 * </pre>
 * 
 * 
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "responseINFOWL", propOrder = {
"result", "descriptionerr", "transid", "ndserr", "wallet" })
public class ResponseINFOWL {

@XmlElement(required = true)
protected String result;
@XmlElement(required = true)
protected String descriptionerr;
@XmlElement(required = true)
protected String transid;
protected String ndserr;
protected TWallet wallet;

    // getters, setters and all.

}

. Я попытался немного поиграть с пространствами имен в пакете -info но все равно без радости.

8
задан agnul 9 September 2011 в 10:57
поделиться