Проблема использования 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..
в ваших источниках, и скопируйте и вставьте источник для этого класса, изменив константу.