Sim, sim, eu sei que muitas perguntas foram feitas sobre este assunto. Mas ainda não consigo encontrar a solução para o meu problema. Eu tenho um objeto Java anotado de propriedade. Por exemplo, Cliente, como neste exemplo . E eu quero uma representação de String dele. O Google recomenda o uso de JAXB para esses fins. Mas em todos os exemplos o arquivo XML criado é impresso no arquivo ou console, assim:
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);
Mas tenho que usar este objeto e enviar pela rede em formato XML. Portanto, quero obter uma String que representa XML.
String xmlString = ...
sendOverNetwork(xmlString);
Como posso fazer isso?
StringWriter
é bem velho. Nos bastidores, ele usaStringBuffer
onde uma abordagem muito mais rápida teria sido usada,StringBuilder
mas isso não existia quando StringWriter foi feito pela primeira vez. Por causa disso, toda chamada parasw.toString()
implica sincronização. Ruim se você estiver procurando por desempenho.Uma opção conveniente é usar javax.xml.bind.JAXB :
O processo reverso (unmarshal) seria:
Não há necessidade de lidar com exceções verificadas nesta abordagem.
fonte
Como A4L mencionando, você pode usar StringWriter. Fornecendo aqui o código de exemplo:
fonte
Você pode encaminhá-lo para um
StringWriter
e agarrar sua corda. detoString()
.fonte
StringWriter
. O link é apenas documentação.StringWriter
, passe paramarshal()
, liguetoString()
.Marshaller
há vários métodos sobrecarregados de empacotamento, basta dar uma olhada em seus parâmetros e para que servem e você encontrará a resposta.Testando e trabalhando o código Java para converter o objeto Java em XML:
Customer.java
createXML.java
fonte
Para converter um objeto em XML em Java
Customer.java
ConvertObjToXML.java
Tente com este exemplo ..
fonte
Usando ByteArrayOutputStream
fonte
Peguei a implementação JAXB.marshal e adicionei jaxb.fragment = true para remover o prólogo XML. Este método pode manipular objetos mesmo sem a anotação XmlRootElement. Isso também lança a DataBindingException desmarcada.
Se o aviso do compilador o incomoda, aqui está a versão com modelo de dois parâmetros.
fonte
Algum código genérico para criar XML Stirng
objeto -> é uma classe Java para convertê-lo em nome XML
-> é apenas um espaço de nome como coisa - para diferenciar
fonte
Aqui está uma classe util para empacotar e desempacotar objetos. No meu caso, era uma classe aninhada, então tornei JAXBUtils estáticos.
fonte
fonte
Use esta função para converter Objeto em string xml (deve ser chamado de convertToXml (sourceObject, Object.class);) ->
Use esta função para converter string xml em objeto de volta -> (deve ser chamado como
createObjectFromXmlString(xmlString, Object.class)
)fonte