Проблема использования Exchange Web Service 2010 с метро jax-ws

Я пытаюсь использовать интерфейс веб-службы Exchange 2010 с помощью JAX-WS. Я использую JAX-WS 2.2 RI (Metro 2.0). 2.1 выставлена ​​та же проблема.

У меня проблемы с Exchange, который возвращает "HTTP/1.1 415 Не удается обработать сообщение, поскольку тип содержимого" text/xml;charset=utf-8 "не соответствует ожидаемому типу" text/xml;charset=utf-8 " ". в качестве ответа (2.1 цитирует значение кодировки, в противном случае тот же ответ).

Видимо мне нужно диктовать точный заголовок Content-type для Exchange, чтобы быть счастливым.

Есть ли способ сделать это, не заставляя меня вручную перестраивать зависимость? В настоящее время я полагаюсь на опубликованные артефакты Maven и хотел бы продолжать делать это, если это вообще возможно.

Процесс потребления - это обычное приложение J2SE, без контейнеров в поле зрения. У меня есть контроль над приложением, и я могу добавить практически все, что требуется, в область приложения, но не могу добавлять элементы вне процесса, такие как прокси-серверы. Клиентские классы были сгенерированы из локального WSDL, но спецификация charset выводится из констант, объявленных в реализации RI jaxws, а не из сгенерированного кода. Таким образом, полученный HTTP-транспорт обрабатывается стандартным клиентом http/https из Sun JRE5 или JRE6.

1 ответ

Решение

Из этой ветки (дающей зашифрованную ссылку, поскольку в настоящее время форумы java.net не работают), очевидно, что в конечном итоге ошибка заключается в том, что вашей веб-службе Exchange 2010 требуется пробел после точки с запятой, что НЕ является частью спецификации w3c.

Решение может заключаться в том, чтобы поместить что-то (в зависимости от ваших настроек) перед метро, ​​чтобы изменить заголовок.

Вы можете попробовать некоторые из следующих подходов:

  • Используйте отражение для изменения постоянной метро.
  • Используйте AOP (я не могу сказать вам, как именно)
  • Посмотрите, где эта константа определена в Metro, создайте пакет javax.xml.ws.etc (или же com.sun.etc.. в ваших источниках, и скопируйте и вставьте источник для этого класса, изменив константу.
Другие вопросы по тегам