Как отключить fastinfoset в JAX-WS и всегда возвращать результаты XML
Я реализовал собственный веб-сервис JAX-WS на Java 8, который возвращает ответы XML в виде двоичного XML. Однако клиент, к сожалению, не поддерживает fastinfoset. Могу ли я использовать конфигурацию, которая отключает fastinfoset и заставляет веб-сервис возвращать ответы в простом XML-формате независимо от того, что клиент передает веб-сервису в заголовке HTTP-запроса?
1 ответ
Как упоминалось в руководстве пользователя JAX-WS RI/Metro, включение / отключение FastInfoset полностью осуществляется клиентом через стандартные заголовки HTTP Accept и Content-Type (при условии, что веб-служба поддерживает Fast Infoset). Это стандартное поведение, когда FastInfoset поддерживается / включается в веб-сервисе. На самом деле FastInfoset по умолчанию включен в Metro. Так что, если клиент не поддерживает его, по крайней мере, он не должен включать application/fastinfoset
в заголовке Accept запросов к веб-сервису.
Если вы хотите полностью отключить поддержку FastInfoset в веб-службе Metro, вы можете использовать графический интерфейс настройки качества веб-службы среды IDE Netbeans. Подробнее об этом в документации Netbeans. В нижней части окна вы увидите флажок Disable Fast Infoset. Применение этого должно привести к добавлению нового утверждения WS-Policy в ваш WSDL, например:
<fi:OptimizedFastInfosetSerialization enabled="false"/>
... где fi
является префиксом для (специфичного для Metro) пространства имен http://java.sun.com/xml/ns/wsit/2006/09/policy/fastinfoset/service
, Это предполагает, что вы использовали WSDL-первый подход. Обратите внимание, что хотя WS-Policy является стандартом, это утверждение не является таковым, оно предназначено для использования только в стеке Metro.
В общем, всякий раз, когда вы хотите поиграть с расширенными функциями веб-службы JAX-WS, такими как оптимизация сообщений (MTOM, Fast Infoset...) или стандарты WS-* (WS-Policy, WS-Security...) и, если вы не можете позволить себе коммерческие инструменты, я настоятельно рекомендую вам использовать IDE Netbeans с WSDL-первым подходом, по крайней мере, для генерации / изменения WSDL (в частности, редактирование утверждений WS-Policy довольно трудоемко без надлежащего инструмента, подобного этому). Действительно, графический интерфейс Netbeans позволяет вам открыть больше возможностей, чем то, что на самом деле описано в руководстве пользователя Metro. Если вы уже используете другую IDE (например, Eclipse или любую другую), вы всегда можете скопировать сгенерированный WSDL и связанные с ним файлы в свой проект Eclipse и, как обычно, применять рекомендации JAX-WS RI/Metro для Eclipse в руководстве пользователя. В частности, вам может понадобиться добавить Metro JAR и в ваш путь к классам, поскольку большинство этих функций не предусмотрено в собственном JDK.