Атрибут ID отсутствует при маршалинге во время webservicetemplate.convertandsend(...)
Я использую jaxb2Marshaller для использования службы SOAP. Я использую его внутри Spring webServiceTemplate. Маршаллинг отлично работает на Windows, но не на Linux.
Проблема возникает только для атрибута с именем "ID". Изменение имени атрибута на "id" или что-то еще работает нормально.
Есть ли разница между маршалингом на windows и linux?
Конфигурация Spring WebserviceTemplate:
<bean id="webServiceTemplate" class="org.springframework.ws.client.core.WebServiceTemplate">
<property name="marshaller" ref="jaxb2Marshaller"></property>
<property name="unmarshaller" ref="jaxb2Marshaller"></property>
<property name="defaultUri"><value>${ws.url}</value></property>
...
</bean>
Теперь, когда я вызываю метод webServiceTemplate.marshalSendAndReceive(createRequest);
Объект "CreateRequest" превращается в XML. Заполняются все атрибуты, кроме атрибута с именем "ID".
SubscriberList.java extends Parent {
protected String abc;
protected String def;
...
}
Parent.java {
protected int ID;
public getID(){return this.id}
public setID(int value){this.id=value}
}
Я использую этот веб-сервис, поэтому изменение WSDL запрещено.
Может кто-нибудь помочь мне решить эту проблему?
1 ответ
Ну, вопрос был немного странным. Внутри XML имя атрибута было "ID", тогда как в сгенерированном классе привязки было объявление переменной, как показано ниже:
<element name="ID" minOccurs="0" maxOccurs="1" type="xsd:int" />
@XmlElement(name = "ID")
protected Integer id;
public Integer getID() {
return id;
}
public void setID(Integer value) {
this.id = value;
}
Методы getxxx () и setxxx (), генерируемые плагином, были getID () и setID () для атрибута "id".
Решение:
1. Я вручную обновил getID () для getId () и setID () для setId () в сгенерированных классах привязки.
2. Прекращена регенерация классов привязки, поскольку WSDL является фиксированным контрактом.