jax-ws @XmlRootElement не генерирует имя корневого элемента - PullRequest
3 голосов
/ 23 мая 2011

Я создал пример проекта jax-ws в моем затмении.

ниже приведен код, который имеет интерфейс, класс Imp и класс помощника

интерфейс:

@WebService

public interface HelloWorld
{

    @WebMethod(operationName="getString") 
    @WebResult(name="Result")
    Helper getHelloWorldAsString(@WebParam(name="input")String str); 
}

Реализация:

@WebService(endpointInterface = "com.test.HelloWorld")
public class HelloWorldImpl implements HelloWorld
{

    @Override
    public Helper getHelloWorldAsString(String str) {

        Helper h = new Helper();
        String[] str1 = {"ABC", "DEF", "GHI"};
        h.setTempValue(str1);


        return h;
    }
}

Помощник:

@XmlRootElement(name = "TypeCode")
@XmlType(name = "TypeCode")
@XmlAccessorType(XmlAccessType.FIELD)

    public class Helper 
    {
        @XmlElement(name="value")
        private String[] tempValue;

        public String[] getTempValue() {
            return tempValue;
        }

        public void setTempValue(String[] tempValue) {
            this.tempValue = tempValue;
        }   
    }

Когда я разверну код выше и отправлю запрося вижу ответ, как показано ниже:

<ns2:getStringResponse xmlns:ns2="http://test.com/">
         <Result>
            <value>ABC</value>
            <value>DEF</value>
            <value>GHI</value>
         </Result>
      </ns2:getStringResponse>

В ответе выше есть корневой элемент как «Результат», но я объявил @XmlRootElement(name = "TypeCode") в классе Helper.Мой вопрос заключается в том, почему нет маршалинга для «TypeCode» в качестве корневого элемента вместо «Result».Jax-ws игнорирует @XmlRootElement и идет с @WebResult?

1 Ответ

0 голосов
/ 07 июня 2011

Своим примером вы отвечаете на свой вопрос.Когда ответ создается, элемент результата всегда является определенным именем для результата метода, поэтому существует аннотация @WebResult.Если вы не укажете возвращаемое имя, по умолчанию оно будет возвращено.В этом элементе у вас будет по одному для каждого поля объекта результата.В вашем случае, и поскольку у вас есть список, jaxb направляет его в последовательность подэлементов без имени для списка.

...