2017-05-22 51 views
0

我正在使用jaxb2Marshaller来使用SOAP服务。我在Spring webServiceTemplate中使用它。 marhsalling在Windows上运行良好,但不在linux上运行。在webservicetemplate.convertandsend(...)编组时丢失ID属性

此问题仅出现在名为“ID”的属性中。将属性名称更改为“id”或别的东西可以正常工作。

在Windows和Linux上进行封送处理有什么区别吗?

春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} 
} 

我正在使用此webservice,因此不允许更改WSDL。

有人可以帮我解决这个问题吗?

回答

0

那么这个问题有点奇怪。 内部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是一个固定的合同。