У меня есть конечная точка JAX-WS с рядом методов, которые все возвращают XML-документы, преобразованные в строку.
Это в течение некоторого времени нормально работал на Sun Java System Application Server 9.1 Update 2, Отрывок из примера исходного ответа:
<?xml version="1.0" encoding="UTF-8"?>
<my_xml version="1.2" query_date="">
<add_transaction_type description="Contributions" name="Contribution" type="C"/>
<add_transaction_type description="Transfer In" name="Xfr or R/O In" type="X"/>
</my_xml>
На новом сервере он возвращается как:
<?xml version="1.0" encoding="UTF-8"?>
<myxml version="1.2" query_date="">
<add_transaction_type description="Contributions" name="Contribution" type="C"/>
<add_transaction_type description="Administration Fee" name="Fee:AUM" type="U"/>
</my_xml>
Почти то же самое, но экранируются только открывающие угловые скобки, а не закрывающие.
Я тестировал это, используя прямые запросы HTTP POST так что я знаю, что это не искажается никаким клиентским кодом.
Я снова обновил сервер до Glassfish 3.1, думая, что возникла проблема с включенными библиотеками веб-сервисов, но безуспешно. Мое приложение полностью полагается на поддержку веб-сервисов в Glassfish - оно не включает никаких собственных WS или XML-библиотек.
Конечная точка в основном определяется следующим образом:
@WebService
@SOAPBinding(style=SOAPBinding.Style.DOCUMENT, use=SOAPBinding.Use.LITERAL, parameterStyle=SOAPBinding.ParameterStyle.WRAPPED)
public class MyEndpoint {
@WebMethod()
public String getTransactionTypes() {
return someMethodThatReturnsXmlString();
}
}
Мне не удалось найти кого-либо еще с этой проблемой, за исключением ссылки с этого автора, который наблюдал его как потребителя службы: Могу ли я заставить JAXB не преобразовывать "в", например, при маршалинге в XML?
Это опубликованная служба, поэтому я не могу полагаться на то, что потребители смогут обновлять своих клиентов, чтобы справиться с этим. Интересно, что мой существующий интерфейс тестирования с использованием сгенерированного клиента Java, похоже, это не беспокоит, но я не могу на это полагаться.
Кто-нибудь сталкивался с этим и мог ли его решить? Есть ли способ подключиться к структуре WS и выполнить собственное экранирование в качестве обходного пути?
Заранее спасибо.