Sí, sí, sé que se hicieron muchas preguntas sobre este tema. Pero todavía no puedo encontrar la solución a mi problema. Tengo un objeto Java anotado de propiedad. Por ejemplo, Cliente, como en este ejemplo . Y quiero una representación String de eso. Google recomienda utilizar JAXB para tales fines. Pero en todos los ejemplos, el archivo XML creado se imprime en un archivo o consola, así:
File file = new File("C:\\file.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
// output pretty printed
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.marshal(customer, file);
jaxbMarshaller.marshal(customer, System.out);
Pero tengo que usar este objeto y enviarlo a través de la red en formato XML. Entonces quiero obtener una cadena que represente XML.
String xmlString = ...
sendOverNetwork(xmlString);
¿Cómo puedo hacer esto?
StringWriter
es muy viejo. Debajo de las cubiertas, se usaStringBuffer
donde se habría utilizado un enfoque mucho más rápido,StringBuilder
pero eso no existía cuando se hizo StringWriter por primera vez. Por eso, cada llamada asw.toString()
implica sincronización. Malo si buscas rendimiento.Una opción conveniente es usar javax.xml.bind.JAXB :
El proceso inverso (unmarshal) sería:
No es necesario lidiar con las excepciones marcadas en este enfoque.
fuente
Como menciona A4L, puede usar StringWriter. Proporcionando aquí código de ejemplo:
fuente
Puede ordenarlo a a
StringWriter
y agarrar su cuerda. detoString()
.fuente
StringWriter
. El enlace es solo documentación.StringWriter
, pásalo amarshal()
, llamatoString()
.Marshaller
hay varios métodos marshal sobrecargados, solo eche un vistazo a sus parámetros y para qué sirven y encontrará la respuesta.Probando y trabajando código Java para convertir objetos java a XML:
Customer.java
createXML.java
fuente
Para convertir un objeto a XML en Java
Customer.java
ConvertObjToXML.java
Prueba con este ejemplo ...
fuente
Usar ByteArrayOutputStream
fuente
Tomé la implementación JAXB.marshal y agregué jaxb.fragment = true para eliminar el prólogo XML. Este método puede manejar objetos incluso sin la anotación XmlRootElement. Esto también arroja la excepción DataBindingException sin marcar.
Si la advertencia del compilador le molesta, aquí está la versión de dos parámetros con plantilla.
fuente
Algún código genérico para crear XML Stirng
objeto -> es una clase Java para convertirlo a un nombre XML
-> es solo un espacio de nombres como una cosa - para diferenciar
fuente
Aquí hay una clase util para ordenar y deshacer objetos. En mi caso, era una clase anidada, así que la convertí en JAXBUtils estática.
fuente
fuente
Utilice esta función para convertir Object a cadena xml (debe llamarse como convertToXml (sourceObject, Object.class);) ->
Utilice esta función para convertir la cadena xml en Object back -> (debe llamarse como
createObjectFromXmlString(xmlString, Object.class)
)fuente