在webservicetemplate.convertandsend(...)期间编组时ID属性丢失

时间:2017-05-22 08:05:49

标签: spring jaxb spring-integration jax-ws spring-ws

我使用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。

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

1 个答案:

答案 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是固定合同,因此停止重新生成绑定类。