2017-05-22 1 views
0

J'utilise jaxb2Marshaller pour consommer un service SOAP. Je l'utilise à l'intérieur de Spring webServiceTemplate. Le marhsalling fonctionne bien sur windows mais pas sur linux.Attribut ID manquant lors du marshaling pendant webservicetemplate.convertandsend (...)

Le problème vient uniquement pour l'attribut "ID". Changer le nom de l'attribut en "id" ou autre chose fonctionne bien.

Existe-t-il une différence entre marshaling fait sur Windows et Linux?

configuration 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> 

Maintenant, quand je fais appel à la méthode webServiceTemplate.marshalSendAndReceive(createRequest); L'objet "createRequest" est de se marshalée dans un fichier XML. Tous les attributs sont remplis à l'exception de l'attribut "ID". Je consomme ce service Web, donc la modification de WSDL n'est pas autorisée.

Quelqu'un peut-il m'aider à résoudre ce problème?

Répondre

0

Bien le problème était peu étrange. intérieur XML le nom d'attribut est "ID", alors que dans la classe de liaison générée avait déclaration de variable comme suit:

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

Les méthodes getxxx() et setXXX() généré par plug-in ont été getID() et setID() pour l'attribut "id".

1. J'ai mis à jour manuellement les getID() à getId() et setID() à setId() dans les classes de liaison générées
2. Arrêté de régénérer les classes de liaison comme WSDL est un contrat fixe.