Unmarshalling Erreur: élément inattendu (uri:l'url des locaux:“objectname”). Éléments attendus sont <{}objectname>
Je suis en utilisant jaxb2-marshaller pour générer des classes de communiquer avec un webservice. Java-classes sont générées avec l'utilisation de certains fichiers wsdl.
Tout est ok maintenant, mais quand j'essaie d'utiliser certaines des classes générées, j'ai eu ce unmarshalling erreur, bien que j'utilise le générés ObjectFactory classes.
Certains de la pile:
org.springframework.ws.soap.client.SoapFaultClientException: Unmarshalling Error: unexpected element (uri:"http://xxxxxxxxx", local:"customer"). Expected elements are <{}customer>
at org.springframework.ws.soap.client.core.SoapFaultMessageResolver.resolveFault(SoapFaultMessageResolver.java:38)
at org.springframework.ws.client.core.WebServiceTemplate.handleFault(WebServiceTemplate.java:826)
at org.springframework.ws.client.core.WebServiceTemplate.doSendAndReceive(WebServiceTemplate.java:621)
at org.springframework.ws.client.core.WebServiceTemplate.sendAndReceive(WebServiceTemplate.java:555)
at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:390)
at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:383)
at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:373)
at einvoice.service.CustomerService.createCustomer(CustomerService.java:40)
at einvoice.controller.facturatie.FacturatieOverzichtController.handleRenderRequest(FacturatieOverzichtController.java:36)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
Et ma classe:
@Service
public class CustomerService {
@Autowired
private WebServiceTemplate customerDaoTemplate;
private ObjectFactory customerObjectFactory;
public CustomerService() {
customerObjectFactory = new ObjectFactory();
}
public boolean createCustomer(Customer c)
{
System.out.println("CREATING CUSTOMER");
einvoice.proxy.customerdaoservice.Customer customer = customerObjectFactory.createCustomer();
customer.setConnectionURL("test");
customer.setUid("testuid");
customer.setName("KorneelTest");
Create create = customerObjectFactory.createCreate();
create.setCustomer(customer);
try
{
customerDaoTemplate.marshalSendAndReceive(customerObjectFactory.createCreate(create));
return true;
}
catch(Exception ex)
{
ex.printStackTrace();
return false;
}
}
C'est le createCustomer() méthode qui permet de voir cette erreur.
The generated ObjectFactory class:
//
//This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.7
//See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
//Any modifications to this file will be lost upon recompilation of the source schema.
//Generated on: 2014.09.12 at 12:04:04 PM CEST
//
package einvoice.proxy.customerdaoservice;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.annotation.XmlElementDecl;
import javax.xml.bind.annotation.XmlRegistry;
import javax.xml.namespace.QName;
/**
* This object contains factory methods for each
* Java content interface and Java element interface
* generated in the be.icredit.einvoice.proxy.customerdaoservice package.
* <p>An ObjectFactory allows you to programatically
* construct new instances of the Java representation
* for XML content. The Java representation of XML
* content can consist of schema derived interfaces
* and classes representing the binding of schema
* type definitions, element declarations and model
* groups. Factory methods for each of these are
* provided in this class.
*
*/
@XmlRegistry
public class ObjectFactory {
private final static QName _AbstractFilter_QNAME = new QName("http://xxxxxxx/", "abstractFilter");
private final static QName _Customer_QNAME = new QName("http://xxxxxxx/", "customer");
private final static QName _FindSingleResponse_QNAME = new QName("http://xxxxxxx/", "findSingleResponse");
private final static QName _Create_QNAME = new QName("http://xxxxxxx/", "create");
private final static QName _Find_QNAME = new QName("http://xxxxxxx/", "find");
private final static QName _CreateResponse_QNAME = new QName("xxxxxxx/", "createResponse");
private final static QName _FindResponse_QNAME = new QName("http://xxxxxxx/", "findResponse");
private final static QName _UpdateResponse_QNAME = new QName("http://xxxxxxx/", "updateResponse");
private final static QName _FindSingle_QNAME = new QName("http://xxxxxxx/", "findSingle");
private final static QName _CustomerFilter_QNAME = new QName("http://xxxxxxx/", "customerFilter");
private final static QName _Update_QNAME = new QName("http://xxxxxxx/", "update");
private final static QName _AbstractEntity_QNAME = new QName("http://xxxxxxx/", "abstractEntity");
/**
* Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: be.icredit.einvoice.proxy.customerdaoservice
*
*/
public ObjectFactory() {
}
/**
* Create an instance of {@link Update }
*
*/
public Update createUpdate() {
return new Update();
}
/**
* Create an instance of {@link CustomerFilter }
*
*/
public CustomerFilter createCustomerFilter() {
return new CustomerFilter();
}
/**
* Create an instance of {@link UpdateResponse }
*
*/
public UpdateResponse createUpdateResponse() {
return new UpdateResponse();
}
/**
* Create an instance of {@link FindSingle }
*
*/
public FindSingle createFindSingle() {
return new FindSingle();
}
/**
* Create an instance of {@link FindResponse }
*
*/
public FindResponse createFindResponse() {
return new FindResponse();
}
/**
* Create an instance of {@link CreateResponse }
*
*/
public CreateResponse createCreateResponse() {
return new CreateResponse();
}
/**
* Create an instance of {@link FindSingleResponse }
*
*/
public FindSingleResponse createFindSingleResponse() {
return new FindSingleResponse();
}
/**
* Create an instance of {@link Customer }
*
*/
public Customer createCustomer() {
return new Customer();
}
/**
* Create an instance of {@link Create }
*
*/
public Create createCreate() {
return new Create();
}
/**
* Create an instance of {@link Find }
*
*/
public Find createFind() {
return new Find();
}
/**
* Create an instance of {@link Pager }
*
*/
public Pager createPager() {
return new Pager();
}
/**
* Create an instance of {@link JAXBElement }{@code <}{@link AbstractFilter }{@code >}}
*
*/
@XmlElementDecl(namespace = "http://xxxxxxx/", name = "abstractFilter")
public JAXBElement<AbstractFilter> createAbstractFilter(AbstractFilter value) {
return new JAXBElement<AbstractFilter>(_AbstractFilter_QNAME, AbstractFilter.class, null, value);
}
/**
* Create an instance of {@link JAXBElement }{@code <}{@link Customer }{@code >}}
*
*/
@XmlElementDecl(namespace = "http://xxxxxxx/", name = "customer")
public JAXBElement<Customer> createCustomer(Customer value) {
return new JAXBElement<Customer>(_Customer_QNAME, Customer.class, null, value);
}
/**
* Create an instance of {@link JAXBElement }{@code <}{@link FindSingleResponse }{@code >}}
*
*/
@XmlElementDecl(namespace = "http://xxxxxxx/", name = "findSingleResponse")
public JAXBElement<FindSingleResponse> createFindSingleResponse(FindSingleResponse value) {
return new JAXBElement<FindSingleResponse>(_FindSingleResponse_QNAME, FindSingleResponse.class, null, value);
}
/**
* Create an instance of {@link JAXBElement }{@code <}{@link Create }{@code >}}
*
*/
@XmlElementDecl(namespace = "http://xxxxxxx/", name = "create")
public JAXBElement<Create> createCreate(Create value) {
return new JAXBElement<Create>(_Create_QNAME, Create.class, null, value);
}
/**
* Create an instance of {@link JAXBElement }{@code <}{@link Find }{@code >}}
*
*/
@XmlElementDecl(namespace = "http://xxxxxxx/", name = "find")
public JAXBElement<Find> createFind(Find value) {
return new JAXBElement<Find>(_Find_QNAME, Find.class, null, value);
}
/**
* Create an instance of {@link JAXBElement }{@code <}{@link CreateResponse }{@code >}}
*
*/
@XmlElementDecl(namespace = "http://xxxxxxx/", name = "createResponse")
public JAXBElement<CreateResponse> createCreateResponse(CreateResponse value) {
return new JAXBElement<CreateResponse>(_CreateResponse_QNAME, CreateResponse.class, null, value);
}
/**
* Create an instance of {@link JAXBElement }{@code <}{@link FindResponse }{@code >}}
*
*/
@XmlElementDecl(namespace = "http://xxxxxxx/", name = "findResponse")
public JAXBElement<FindResponse> createFindResponse(FindResponse value) {
return new JAXBElement<FindResponse>(_FindResponse_QNAME, FindResponse.class, null, value);
}
/**
* Create an instance of {@link JAXBElement }{@code <}{@link UpdateResponse }{@code >}}
*
*/
@XmlElementDecl(namespace = "http://xxxxxxx/", name = "updateResponse")
public JAXBElement<UpdateResponse> createUpdateResponse(UpdateResponse value) {
return new JAXBElement<UpdateResponse>(_UpdateResponse_QNAME, UpdateResponse.class, null, value);
}
/**
* Create an instance of {@link JAXBElement }{@code <}{@link FindSingle }{@code >}}
*
*/
@XmlElementDecl(namespace = "http://xxxxxxx/", name = "findSingle")
public JAXBElement<FindSingle> createFindSingle(FindSingle value) {
return new JAXBElement<FindSingle>(_FindSingle_QNAME, FindSingle.class, null, value);
}
/**
* Create an instance of {@link JAXBElement }{@code <}{@link CustomerFilter }{@code >}}
*
*/
@XmlElementDecl(namespace = "http://xxxxxxx/", name = "customerFilter")
public JAXBElement<CustomerFilter> createCustomerFilter(CustomerFilter value) {
return new JAXBElement<CustomerFilter>(_CustomerFilter_QNAME, CustomerFilter.class, null, value);
}
/**
* Create an instance of {@link JAXBElement }{@code <}{@link Update }{@code >}}
*
*/
@XmlElementDecl(namespace = "http://xxxxxxx/", name = "update")
public JAXBElement<Update> createUpdate(Update value) {
return new JAXBElement<Update>(_Update_QNAME, Update.class, null, value);
}
/**
* Create an instance of {@link JAXBElement }{@code <}{@link AbstractEntity }{@code >}}
*
*/
@XmlElementDecl(namespace = "http://xxxxxxx/", name = "abstractEntity")
public JAXBElement<AbstractEntity> createAbstractEntity(AbstractEntity value) {
return new JAXBElement<AbstractEntity>(_AbstractEntity_QNAME, AbstractEntity.class, null, value);
}
}
L'package-info.java catégorie:
//
//This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.7
//See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
//Any modifications to this file will be lost upon recompilation of the source schema.
//Generated on: 2014.09.12 at 03:44:51 PM CEST
//
@javax.xml.bind.annotation.XmlSchema(namespace = "http://xxxxxxx/")
package einvoice.proxy.customerdaoservice;
Pouvez-vous ajouter le printemps de configuration de Client, et de Créer les classes? ... en outre pourquoi la méthode marshalSendAndReceive vous ne mettez pas directement créer un objet?
marshalSendAndReceive convertit ma "demande" à un format compréhensible (XML) pour l'contacté webservice. la méthode de création est utilisée pour créer un objet dans le webservice. Ajouté plus de documentation, pas plus d'espace pour créer une classe.
Personne? :/. Im vraiment coincé sur ce.. :s
marshalSendAndReceive convertit ma "demande" à un format compréhensible (XML) pour l'contacté webservice. la méthode de création est utilisée pour créer un objet dans le webservice. Ajouté plus de documentation, pas plus d'espace pour créer une classe.
Personne? :/. Im vraiment coincé sur ce.. :s
OriginalL'auteur Kornelito Benito | 2014-09-12
Vous devez vous connecter pour publier un commentaire.
package-info.java
Merci de poster votre
ObjectFactory
etpackage-info.java
(doit être généré à côté de laObjectFactory
).Vous avez réellement n'avez pas à créer vos instances via
ObjectFactory
, normalnew
constructions, beau travail. 🙂ObjectFactory
n'est pas de la magie. Il est principalement utilisé par JAXB pendant unmarshalling.ps. Veuillez étiqueter les
maven-jaxb2-plugin
des questions liées à lamaven-jaxb2-plugin
tag - ce qui va attirer mon attention plus rapide.C'est bizarre. Mon wsdl ne ont la bonne cible des espaces de noms, et j'ai la package-info.java classe dans mon projet..
Hm, tout semble aller bien sur la surface. S'il vous plaît essayer de faire un isolées de cas de test, voir si le placement dans une unité de test.
Pour être honnête, je n'ai aucune expérience avec la création de cas de test JUnit, et certainement pas Dans le printemps de l'environnement. Je suis vraiment coincé. J'ai essayé de faire un "test" cas par juste en utilisant cette méthode de démarrage.
Oubliez l'environnement, de test sans n'importe quel environnement. Et d'apprendre à connaître les tests. Ils aident à beaucoup pour trouver où est l'erreur. Si vous manipulez votre code comme un monolyth, vous aurez besoin de beaucoup plus de temps. La diviser en parts et vérifier qu'ils fonctionnent isolé. Voici un exemple de unmarshalling de test: github.com/highsource/ogc-schemas/blob/master/kml/2.2.0/src/... les Tests que le fichier suivant unmarshals: github.com/highsource/ogc-schemas/tree/master/kml/2.2.0/src/...
OriginalL'auteur lexicore
Veuillez utiliser l'annotation suivante
à la racine de la classe, comme indiqué ci-dessous. Depuis JAXb l'habitude de créer des @XmlRootElement annotation automatiquement, vous devez mettre manuellement cette annotation en haut de la classe.
}
OriginalL'auteur Jithin Kunjachan
Si vous avez plus de 1 module dans votre projet de vérification des doublons de Classe des noms ou des noms de répertoire.
J'avais la même erreur et j'ai pu le résoudre en changeant les noms de package dans mon projet.
J'ai eu deux modules dans mon projet, avec la même structure de répertoire
module/src/main/java/com/example/directory/path
Nous avons eu deux différents points de terminaison et de 2 différents fichiers wsdl, mais les deux sont de la même client. Lorsque nous auto-généré les classes POJO du langage wsdl il a créé le fichier de structure pour nous. J'ai remarqué que l'espace de noms générés dans le XML a été en utilisant le même espace de noms XML généré dans les deux modules, lorsqu'ils étaient censés être différents (d'où le stacktrace).
Tout ce que je fait pour résoudre le problème était de changer les noms de répertoire pour être plus précis pour chaque module.
OriginalL'auteur J Mullen
Je pense que j'ai trouvé le problème.
J'ai été en utilisant la version 0.9.0 de l'maven-jaxb2-plugin. Cette version m'a donné l'étrange exception! Je revenue à la version 0.8.3 de maven-jaxbe2-plugin, cette version renvoie une erreur 404:
OriginalL'auteur Kornelito Benito
Cette trace est généré en raison de la noms de de demande et de réponse de message ne sont pas de même dans le WSDL et de la classe java:
Reponse Message:
Message D'Acceptation:
Dans cet exemple, le fichier WSDL doit définir:
1.
OriginalL'auteur juldeh