Ошибка Axis2 / JAX-WS при отмене сортировки XML-файла с большими текстовыми элементами - PullRequest
1 голос
/ 09 июля 2009

Я полностью застрял и мне нужна ваша помощь ... Я создал заглушку веб-сервиса с jaxb 2.x для службы, которая отправляет двоичный файл (изображения jpg в кодировке base64) в мыльном сообщении. Все работало нормально, и я мог получать и отображать изображения, пока не попытался экспортировать приложение RCP eclipse в продукт, что сразу вызвало LinkageErrors (как обычно, javax.xml.namespace.QName и некоторые другие).

Мне удалось решить эту проблему с помощью 'rebundle' axis2, и теперь все снова работает нормально - за исключением анализа двоичной части файла в заглушке, которая теперь вызывает исключение (неожиданный элемент).

При ближайшем рассмотрении выяснилось, что читатель (OMStAXWrapper), который используется в сгенерированном axis2-jaxb Stub, теперь не читает весь текст base64, а только первые 10000 байт. Тогда он не находит правильное окончание элемента и выдает исключение.

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

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

1 Ответ

1 голос
/ 09 июля 2009

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

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

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

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

...