2017-05-22 8 views
0

SOAPサービスを使用するためにjaxb2Marshallerを使用しています。 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> 

は今、私は "CreateRequest" オブジェクトはXMLにマーシャリングなっているwebServiceTemplate.marshalSendAndReceive(createRequest);メソッドを呼び出しています。 「ID」という名前の属性を除いて、すべての属性が移入されます。

このWebサービスを使用しているため、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()メソッドでした属性 "id"のgetID()およびsetID()

ソリューション:
1.生成されたバインディングクラスでgetID()およびsetID()をsetId()に手動で更新しました。
2.バインディングクラスをWSDLとして再生を停止することは固定契約です。

関連する問題