我使用jaxb2Marshaller来使用SOAP服务。我在Spring webServiceTemplate中使用它。 marhsalling在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);
&#34; CreateRequest&#34;对象正在被编组为XML。除了名为&#34; ID&#34;的属性外,将填充所有属性。
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}
}
我正在使用此Web服务,因此不允许更改WSDL。
有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
这个问题有点奇怪。 在XML内部,属性名称为&#34; ID&#34;,而在生成的绑定类中,变量声明如下:
<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()方法是属性&#34; id&#34;的getID()和setID()。
解决方案:
1.我在生成的绑定类中手动将getID()更新为getId()和setID()为setId()。
2.由于WSDL是固定合同,因此停止重新生成绑定类。