Pergunta

Eu tenho um serviço da Web e um cliente que está passando por strings contendo referências de caracteres como (0x1a). Estes são inválidos no XML 1.0, mas válidos no XML 1.1. O analisador XML do Axis está lançando exceções por causa dessas referências de caráter. Existe uma maneira de forçá -lo a analisar a resposta como XML 1.1 ou inserir a declaração XML? (Atualmente, não há um.) Eu procurei usar manipuladores, mas meu entendimento é que eles são invocados depois que o XML já está analisado.

Foi útil?

Solução

Você está passando em um InputStream ou Reader? Nesse caso, você pode envolver a fonte em outra classe (como BufferedReader trabalha), mas use -o para soltar os caracteres desnecessários.

Outras dicas

Eu acho que você vai ter um momento bastante difícil com isso. Meu entendimento é que o padrão WSDL 2.0 é construído no XML 1.0. Então, que tipo de serviço você chama que se descreve com o WSDL (assumindo o XML 1.0) e, em seguida, começa a enviar mensagens com caracteres XML 1.1?

Ao definir um serviço Axis2, você pode definir quais manipuladores ele possui no arquivo Services.xml. Por exemplo esta página Eles têm um serviço que usou o org.apache.axis2.receivers.rawxmlinoutMessageReveiver ... Eu sei que não é isso que você está tentando fazer, mas talvez seja um lugar para começar a procurar ou pensar.

Há mais uma opção - para fazer o analisador tratar a entrada como XML 1.1. Como o Axis2 usa o analisador Woodstox, você pode estender o WstxInputFactory e substituir o método createPrivateConfig():

@Override
public ReaderConfig createPrivateConfig() {
    ReaderConfig config = super.createPrivateConfig();
    config.enableXml11(true);
    return config;
}

Em seguida, use essa fábrica personalizada via propriedade do sistema: -Djavax.xml.stream.xmlinputFactory = mypackage.mywstxinputFactory

Observe que essa solução alternativa é apenas para casos em que você absolutamente não pode alterar o serviço da web de buggy que produz XML inválido. É possível encontrar efeitos colaterais.

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