Ошибка Axis2 / JAX-WS при UnmarShalling XML-файл с большими текстовыми элементами

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

  •  12-09-2019
  •  | 
  •  

Вопрос

Я полностью застрял и нуждаюсь в вашей помощи ... Я создал заглушку для веб -сервиса с JAXB 2.x для службы, которая отправляет двоичный файл (кодированные изображения JPG BASE64) в сообщении SOAP. Все работало нормально, и я смог получить и отображать изображения, пока я не попытался экспортировать приложение Eclipse RCP в продукт, который вызвал imediatly linkageerrors (как обычно, javax.xml.namespace.qname и еще несколько).

Я смог решить эту проблему для «Revundle» Axis2, и теперь все снова работает нормально - за исключением анализа бинарной части файла в заглушке, что теперь вызывает исключение (неожиданный элемент).

Более пристальный взгляд показал, что читатель (OmstaxWrapper), который используется в заглушке, сгенерированном Axis2-JAXB, теперь не читает весь текст Base64, а только первые 10000 байтов. Тогда он не находит правильное окончание элемента и бросает исключение.

Как упоминалось ранее - этого не произошло в начале, поэтому я надеюсь, что это просто параметр или вариант. Заранее большое спасибо за каждую помощь или намек!

РедактироватьЭто был не JAXB, я использовал JAXWS и WSIMPORT, чтобы создать заглушку для файла WSDL ...

Это было полезно?

Решение

Для некоторого фона OmstaxWrapper является частью Axiom, которая представляет собой пользовательскую потоковую утилиту Axis2 для веб -сервисов, которую Axis2 использует в качестве замены Saaj. Я не был бы очень удивлен, если бы это было багги, если мой предыдущий опыт работы с Осью - что -то, чтобы пройти.

Если вы хотите отправить большие двоичные файлы за мыло, лучшая технология для этого на данный момент кажется MTOM (см. здесь как использовать его с Axis2). Это может лучше оптимизировать бинарное представление, и ваша проблема может исчезнуть. Тем не менее, как клиент, так и сервер должны быть в состоянии говорить на MTOM, так что это может быть не вариант для вас.

В качестве альтернативы, должно быть возможно убедить Axis2 использовать стандартный API SAAJ вместо использования аксиомы. Саадж медленнее, но должен быть менее глюми.

Мое последнее предложение - отказаться от Axis2 для вашего клиента и использовать что -то более легкое. Весна Предоставляет очень хороший клиент API, который в настоящее время является моим инструментом для общения с удаленными веб -службами. Он поддерживает Axiom и Saaj, а также MTOM, и достаточно легкий, что довольно легко выяснить, почему что -то пошло не так.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top