Java WebService devuelve < y > para caracteres < >

He escrito un servicio web/soap que devuelve una cadena como:

"<GeocodeResponse><City>Denver</City><State>CO</State></GeocodeResponse>"

He definido un esquema para estos datos:

<xs:element name="GeocodeResponse">
<xs:complexType>
    <xs:sequence>
        <xs:element name="City"/>
        <xs:element name="State"/>
    </xs:sequence>
</xs:complexType>
</xs:element>

y esto se devuelve como la respuesta de mi método de servicio web

<xs:complexType name="standardizeResponse">
  <xs:sequence>
     <GeocodeResponse/>
  </xs:sequence>
</xs:complexType>

Dentro del sobre de jabón, el Xml se escapa, por lo que en lugar de obtener el xml que quiero, obtengo algo como: &lt;GeocodeResponse&gt;&lt;City&gt;Denver&lt;/City&gt;&lt;State&gt;CO&lt;/State&gt;&lt;/GeocodeResponse&gt;

Pensé que al usar el esquema para definir lo que se devuelve en la cadena, evitaría que la cadena se escapara.

preguntado el 22 de mayo de 12 a las 21:05

2 Respuestas

Cuando proporciona una cadena sin procesar a un procesador XML, se entiende que el significado de la cadena debe transmitirse a un receptor de modo que la cadena real pueda reconstruirse. Esto significa que el procesador evitará cualquiera de los caracteres XML reservados (< > & % ') para que no se malinterpreten como parte del documento en lugar del mensaje en el documento.

Si usa xjc para generar objetos que reflejen los esquemas (o, mejor aún, wsimport para generar objetos y stubs de servicios desde un WSDL), puede llenar el objeto generado con los datos y luego usar Marshaller para construir el mensaje de respuesta que luego se representará como XML correctamente etiquetado. La documentación de Marshaller en realidad proporciona buenos ejemplos de uso para ordenar en varias formas (http://docs.oracle.com/javase/6/docs/api/javax/xml/bind/Marshaller.html).

Estoy haciendo suposiciones para compensar la falta de contexto, por lo que si esta respuesta no parece aplicarse, responda como tal e incluya el código del punto final del servicio real y yo (u otro respondedor) podemos volver a visitar.

¡Buena suerte!

contestado el 24 de mayo de 12 a las 05:05

Puedes probar este, me resolvió el problema.

org.apache.axiom.om.OMElement tmpElement=org.apache.axiom.om.util.AXIOMUtil.stringToOM(Element.getText());

Cuando agregue tmpElement a su sobre SOAP, recibirá una representación adecuada de "<" y "&" (en lugar de "<" y "&")

Respondido 09 ago 12, 10:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.