2012-05-15 361 views
6

me sale error al conectar al servicio web:CXF: error Unmarshalling: elementos inesperados, ¿qué {} significa?

javax.xml.ws.soap.SOAPFaultException: Unmarshalling Error: unexpected element (uri:"", local:"OrderID"). Expected elements are <{}Login>,<{}CrewId>,<{}OrderID >,<{}OrderNumber >

servicio está expuesta usando org.apache.cxf.transport.servlet.CXFServlet y jaxws:endpoint anotación. El cliente se genera usando CXF. En primer lugar, me sorprende que esté utilizando la misma tecnología en ambos extremos y que la solución no funciona; en segundo lugar, este misterioso {} en los mensajes de error.

Entonces, ¿qué hay de malo y cómo entender esto {}?

Respuesta

10

¿Ha notado espacio entre OrderID y '>'? Se espera que sea <{}OrderID > y envíe "OrderID". Compruebe si no tiene espacios en los nombres de sus elementos.

+0

Sí, tienes razón, no he pedido a alguien que agregue espacio allí. –

+0

+1 por ahorrarme tiempo, ya que su sugerencia me ayudó a encontrar un error tipográfico en un nombre de elemento (no en un espacio adicional, solo un nombre diferente) que dio como resultado el mismo mensaje de error no muy claro. – Withheld

+0

Respuesta simple y directa. He leído muchos comentarios, pero este es el mejor. – VJS

15

Have you noted space between OrderID and '>'? Expected is <{}OrderID > and you send >"OrderID". Check if you don't have spaces in your element names.

Mientras que la respuesta anterior de Stepan Vihor ayudado a llegar lo que necesitaba, permítame responder a su pregunta de cuál es el "{}" significa:

Significa que el JAX-B Unmarshaller está a la espera de su El elemento OrderID no tiene espacio de nombre, es decir, el espacio de nombre uri para ese elemento debe ser igual a "".

Vea aquí una breve introducción sobre XML Namespaces

+0

Sí, gracias por esta explicación, es útil. –

-1

A veces hay que especificar los nombres utilizados en el WSDL (mayúsculas y minúsculas): < {log}>, < {} CrewId>, < {} IDPedido> , < {} OrderNumber>

@XmlElement(name = "CrewId") 
protected String crewId; 
@XmlElement(name = "OrderID ") 
protected String orderID; 
@XmlElement(name = "Login") 
protected String login; 
@XmlElement(name = "OrderNumber") 
protected String orderNumber; 
2

@icyitscold, el comentario que desea añadir desde mi experiencia es que se puede cambiar la elementFormDefault a "calificado" como elementFormDefault="qualified" en el elemento xs:schema. El espacio de nombre estará calificado de manera predeterminada.

Eso es para el enfoque WSDL-en primer lugar, si se utiliza el enfoque de código primero, puede considerar añadir el cambio como

@javax.xml.bind.annotation.XmlSchema( attributeFormDefault = javax.xml.bind.annotation.XmlNsForm.UNQUALIFIED, elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)

0

llegué mismo error,

javax.xml.ws.soap.SOAPFaultException: Unmarshalling Error: unexpected element (uri:"", local:"country"). Expected elements are <{}seconds>,<{}month>,<{}hour>,<{}year>,<{}minutes>,<{}day>

Entonces encontrar en el lado del servicio web el tipo de respuesta agregó una nueva propiedad 'país'.

Para ignorar la nueva propiedad agregada, agregue las siguientes propiedades en la configuración 'jaxws: client'.

<jaxws:client id="abc" 
       serviceClass="someClass" 
       address="url"> 
    <jaxws:properties> 
     <entry key="schema-validation-enabled" value="false"/> 
     <entry key="set-jaxb-validation-event-handler" value="false"/> 
    </jaxws:properties> 
</jaxws:client> 
Cuestiones relacionadas