2017-05-22 67 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"라는 속성을 제외한 모든 속성이 채워집니다.

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()

해결 방법 : 생성 된 바인딩 클래스에서 getID() 및 setID()를 setId()로 수동으로 업데이트했습니다.
2. 바인딩 클래스를 WSDL로 재생성하는 것을 중지하면 고정 계약입니다.