Erro de Axis2 / Jax-Ws Ao Unarshalling Arquivo XML com grandes elementos de texto

StackOverflow https://stackoverflow.com/questions/1105104

  •  12-09-2019
  •  | 
  •  

Pergunta

Estou completamente preso e preciso da sua ajuda ... criei um stub de serviço da web com o JAXB 2.x para um serviço que envia um arquivo binário (imagens JPG base64 codificadas) dentro de uma mensagem SOAP. Tudo funcionou bem e eu pude receber e exibir as imagens, até que tentei exportar o aplicativo RCP Eclipse para um produto, o que causou o LinkageErrors do LinkageRors (como de costume, javax.xml.namespace.qname e um pouco mais).

Consegui resolver esse problema para 'secoar' exis2 e agora tudo funciona bem novamente - exceto a análise da parte do arquivo binário dentro do stub, que agora causa uma exceção (elemento inesperado).

Um olhar mais atento revelou que o leitor (omstaxwrapper), usado no stub gerado por Axis2-Jaxb, agora não lê o texto Base64 inteiro, mas apenas os primeiros 10000 bytes. Em seguida, não encontra o final correto do elemento e joga uma exceção.

Como mencionado antes - isso não aconteceu no começo, então espero que seja apenas um parâmetro ou uma opção. Muito obrigado antecipadamente por cada ajuda ou dica!

EditarNão era Jaxb, usei Jaxws e Wsimport para criar o stub para o arquivo WSDL ...

Foi útil?

Solução

Para um pouco de plano de fundo, o Omstaxwrapper faz parte do Axiom, que é o utilitário de streaming personalizado do Axis2 para serviços da Web, que o Axis2 usa como substituto do SAAJ. Eu não ficaria muito surpreso se fosse buggy, se minha experiência anterior com o Axis é algo para se passar.

Se você deseja enviar binários grandes sobre sabão, a melhor tecnologia para isso no momento parece ser MTOM (veja aqui para como usá -lo com o Axis2). Isso pode otimizar melhor a representação binária, e seu problema pode desaparecer. No entanto, o cliente e o servidor devem poder falar MTOM, portanto, pode não ser uma opção para você.

Como alternativa, deve ser possível convencer o Axis2 a usar a API SAAJ padrão em vez de usar o Axioma. Saaj é mais lento, mas deve ser menos buggy.

Minha sugestão final é abandonar o Axis2 para o seu cliente e usar algo mais leve. Spring-ws Fornece uma API do cliente muito agradável, que atualmente é a minha ferramenta de escolha para conversar com os serviços da Web remotos. Ele suporta Axiom e Saaj, assim como o MTOM, e é suficientemente leve que é muito fácil descobrir por que algo deu errado.

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