2009-07-09 2 views
1

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

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

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

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

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

ответ

1

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

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

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

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

+0

Спасибо за ваш ответ - к сожалению, я не контролирую поставщика услуг и не могу переключиться на MTOM ... У меня такое ощущение, что HTTP_CLIENT_STREAMING_CHUNK_SIZE теперь установлен в 10k, а базовый XMLStreamReader не может отправить 250k двоичные данные сразу, что беспокоит созданный Service Stub ...!? –

+0

Это возможно, да. На вашем месте я бы попробовал Spring-WS. Боюсь, у меня нет опыта работы с Axis2. – skaffman