Проблема использования Exchange Web Service 2010 с метро jax-ws - PullRequest
1 голос
/ 16 декабря 2009

Я пытаюсь использовать интерфейс веб-службы 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 Ответ

1 голос
/ 16 декабря 2009

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

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

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

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