Errore axis2 / jax-ws quando si blocca il file XML con elementi di testo di grandi dimensioni

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

  •  12-09-2019
  •  | 
  •  

Domanda

Sono completamente bloccato e ho bisogno del tuo aiuto ... Ho creato uno stub del servizio Web con JAXB 2.x per un servizio che invia un file binario (immagini JPG codificate da base64) all'interno di un messaggio SOAP. Tutto ha funzionato bene e sono stato in grado di ricevere e visualizzare le immagini, fino a quando non ho provato a esportare l'app Eclipse RCP in un prodotto, che ha causato iMedialmente LinkageErrors (come al solito, javax.xml.namespace.qname e altri).

Sono stato in grado di risolvere quel problema per "Rebundle" Axis2 e ora tutto funziona di nuovo bene, tranne l'analisi della parte del file binario all'interno dello stub, che ora causa un'eccezione (elemento inaspettato).

Uno sguardo più attento ha rivelato che il lettore (OmStaxWrapper), che viene utilizzato nello stub generato da Axis2-JAXB, ora non legge l'intero testo di base64 ma solo i primi 10000 byte. Quindi non trova il finale corretto dell'elemento e lancia un'eccezione.

Come accennato in precedenza - questo non è accaduto all'inizio, quindi spero che sia solo un parametro o un'opzione. Grazie in anticipo per ogni aiuto o suggerimento!

ModificareNon era jaxb, ho usato jaxws e wsimport per creare lo stub per il file wsdl ...

È stato utile?

Soluzione

Per un po 'di sfondo, OmStaxWrapper fa parte di Axiom, che è l'utilità di streaming personalizzata di Axis2 per i servizi Web, che Axis2 utilizza in sostituzione di SAAJ. Non sarei enormemente sorpreso se fosse buggy, se la mia precedente esperienza con l'asse è qualcosa da fare.

Se vuoi inviare grandi binari sul sapone, la migliore tecnologia per questo al momento sembra essere MTOM (vedi qui per come usarlo con axis2). Questo può ottimizzare meglio la rappresentazione binaria e il tuo problema potrebbe andare via. Tuttavia, sia il client che il server devono essere in grado di parlare MTOM, quindi potrebbe non essere un'opzione per te.

In alternativa, dovrebbe essere possibile convincere Axis2 ad utilizzare l'API SAAJ standard invece di usare Axiom. Saaj è più lento, ma dovrebbe essere meno buggy.

Il mio ultimo suggerimento è di abbandonare Axis2 per il tuo cliente e utilizzare qualcosa di più leggero. Spring-ws Fornisce un'API client molto bella, che è attualmente il mio strumento preferito per parlare con i servizi Web remoti. Supporta Axiom e Saaj, così come MTOM, ed è sufficientemente leggero che è abbastanza facile scoprire perché qualcosa è andato storto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top