/ / Create Node from XML string sem usar Parse - xml, groovy

Criar nó de string XML sem usar Parse - xml, groovy

Eu tenho uma função que leva em um ODataObject que contém algum XML de um evento disparado de um barramento de mensagens. Eu estou escrevendo casos de teste para verificar como minha função lida com XML proveniente do barramento de mensagens que consiste apenas em: <?xml version="1.0" encoding="utf-8"?>.

É assim que estou criando o DataObject que é passado para meus outros casos de teste

final Document document = DOMUtil.parse(TestEventXML)
final DataObject dataObject = new ODataObject(document.getDocumentElement())
myListener.onMessage(dataObject)

No entanto, passando a string acima como TestEventXML retorna este erro:

java.lang.NullPointerException: Cannot invoke method getDocumentElement() on null object

porque chamando DOMUtil.parse() em uma seqüência XML formatada incorretamente retornará null.

Então, eu preciso de algum tipo de trabalho que me permita criar um org.w3c.dom.Node que eu posso passar para o construtor para ODataObject fora de uma string XML que eu criei. Qualquer idéias, sugestões, etc seria muito apreciada.

EDITAR - Resumo da pergunta

Para esclarecer, eu sei que a corda que eu estou tentandopassar é apenas o cabeçalho de um arquivo XML sem conteúdo. Mas às vezes é isso que vem através do barramento de mensagens, então eu preciso testar se minha função lida corretamente. Minha função tem código para manipular XML malformado, então minha pergunta não é como verificar se o XML está malformado. O problema é que preciso criar um DataObject para testar se estou lidando com ele corretamente, mas não posso criar um DataObject usando XML malformado porque o parse retorna null.

EDIT 2 - Como estou lidando com XML malformado / nulo

No meu onMessage função, eu chamo o toString método no DataObject de entrada, que retorna uma string do XML no DataObject. Então, para criar um groovy.util.Node objeto, tento new XmlParser().parseText(xmlString) e pegar tudo SAXParseExcetions, que resultam do XML sendo mal formado ou nulo. o onMessage função, em seguida, apenas retorna, ignorando todo o código de análise no resto da função.

Termo aditivo - Outra pergunta que poderia responder a minha pergunta original
org.w3c.dom.Node é uma interface, então eu não posso simplesmente fazer new 0DataObject(new Node()). Existe uma maneira de criar um nó e definir o atributo correto para ser minha String XML?

Por favor, comente com qualquer dúvida que você tenha.

Respostas:

2 para resposta № 1

Correção que funcionou: Usado Groovy "s MockFor classe para criar uma simulação de um ODataObject. Ao criar o DataObject, eu passo XML formatado corretamente. No entanto, quando o ODataObject"s toString função é chamada, eu interceptar e retornar o XML malformado.

Tentarei examinar a sugestão do Platinum Azure para ver como o ODataObject está sendo construído pelo barramento de mensagens para o qual estou ouvindo para determinar por que ele está retornando <?xml [...]> corda.


1 para resposta № 2

Eu posso estar errado, mas eu sinto que você está tentandopara resolver o problema errado. Eu acho que eu não tenho certeza porque você não pode simplesmente construir o nó manualmente, ou até mesmo porque você precisa construir o nó quando você sabe que o XML não é bom.

Se você está esperando por mais informações fora dobus de mensagem em questão, e se você tiver controle sobre o esquema para os dados de entrada, talvez você deva enviar um tamanho de conteúdo primeiro e, em seguida, aguardar tantos dados antes de tentar fazer o trabalho de análise de XML? Como XML é uma gramática livre de contexto fortemente baseada em nós balanceados, não é uma boa idéia tentar construir um documento XML na memória sem ter cada último byte, incluindo o fechamento da tag raiz.

Caso contrário, se você tiver que lidar com o nulo, considere a possibilidade de empregar padrão de objeto nulo.