Pergunta

Gostaria de controlar a ordem de atributo em .java arquivos gerados pelo compilador JAXB.

Estou ciente de que ordem atributo não é importante para a validação de xml. A ordem é importante para comparação textual de xml ordenados em um ambiente de teste de regressão. A ordem dos atributos em um arquivo afeta diretamente a ordem dos atributos em tags XML mobilizados.

grupos de atributos Toda vez que o compilador JAXB é executado aparecem em uma ordem diferente, mesmo sem alterações no esquema. Não há opção aparente disponível no compilador para evitar esse comportamento.

Eu gostaria de evitar a execução de um script de pós-compilação para atributos em ordem alfabética reordenar nos arquivos .java gerados desde Isto quebra os grupos de atributos, mas não tenho a certeza não há outra opção.

Todas as sugestões são muito apreciados.

Obrigado, Dave

Foi útil?

Solução 4

Esta discussão fornece uma grande solução para o meu problema.

Usando XSL a sorte atributos

Uma das respostas contém uma transformação XSL que apenas reordena os atributos. Funciona perfeitamente se um pouco lento.

Outras dicas

Aparentemente, em JAXB 2.0 você pode usar o @XmlAccessorOrder anotação ou @XmlType (propOrder =)

Eu recomendo usar um analisador XML para validar a saída em vez de fazer comparações textuais. Se você vai ser analisar o xml para re-fim de qualquer maneira, você pode muito bem fazer a comparação usando ferramentas XML.

Edit: A tentativa de controlar o XML gerado pela manipulação da ordem código-fonte Java parece ser uma forma frágil de fazer as coisas. Concedido, isto é apenas para teste, por isso, se algo quebrar o código ainda pode funcionar corretamente. As pessoas mudam fonte de ordem código todo o tempo, às vezes por acidente, e ele vai ser chato ou uma fonte sutil de problemas se você tem que contar com uma certa ordenação.

Como para formas de comparar os dados XML usando ferramentas XML, eu nunca pessoalmente feito isso em grande escala, mas este link menciona algumas ferramentas gratuitas . Para mim a extensão para JUnit que fornece afirmações relacionadas a XML seria o meu primeiro passo, como que poderiam integrar-se bem com os meus testes existentes. Caso contrário, uma vez que você está olhando principalmente para a equivalência exata, você pode simplesmente analisar os dois arquivos XML, em seguida, iterar sobre os nós no arquivo 'esperado' e ver se os nós estão presentes no arquivo 'real'. Em seguida, basta verificar se há quaisquer outros nós que você não esperar para ver.

Se você precisa executar comparação textual de documentos XML, há melhores maneiras de fazer isso do que por tentar controlar a saída de um quadro XML que não faz distinção entre a encomenda atributo.

Por exemplo, há XMLUnit , que é uma extensão do JUnit especificamente para asserções XML, e ele lida com espaços em branco e ordenando muito bem.

Uma solução mais geral é XOM é Canonicalizer , que DOM XML saídas de tal forma que a ordenação atributo e espaço em branco é previsível. Muito útil.

Então ... vamos JAXB (ou qualquer outro) gerar o XML como lhe aprouver, em seguida, executar as saídas através XMLUnit ou XOM, e comparar. Isto tem a vantagem de não depender de JAXB, ele vai trabalhar com qualquer XML gerado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top