Конечная точка JAX-WS только частично экранирует строку XML

У меня есть конечная точка 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 и выполнить собственное экранирование в качестве обходного пути?

Заранее спасибо.

6
задан Community 23 May 2017 в 12:04
поделиться