С CXF (фактически Groovyws), как я могу генерировать заголовок мыла с одним дочерним узлом, имеющим текстовый узел?
-
25-09-2019 - |
Вопрос
Я создаю Groovy Client для A.NET SOAP SERVICE, которая требует, чтобы ямальный заголовок, который выглядит так:
<soap:Header>
<HeaderInfo xmlns="http://foo.bar.com/ns">
<token>abc-unique-token</token>
</HeaderInfo>
</soap:Header>
я нашел FAQ для добавления заголовков в сообщения CXF И это заставляет меня почти там, но не совсем. Пример, который они дают для варианта 4, выглядит так:
List<Header> headers = new ArrayList<Header>()
Header header = new Header(new QName("http://foo.bar.com/ns", "HeaderInfo"),
"abc-unique-token", new JAXBDataBinding(String.class))
headers.add(header)
proxy.client.getRequestContext().put(Header.HEADER_LIST, headers)
Используя этот код, я могу сделать это, чтобы сделать это:
<soap:Header>
<HeaderInfo xmlns="http://foo.bar.com/ns">
abc-unique-token
</HeaderInfo>
</soap:Header>
Но узел «HeaderInfo» отсутствует в узере ребенка «токен», чтобы окружить «ABC-Unique-Token», и я не уверен, как его попасть там.
Есть ли какая-то простая вещь, которую я могу перейти к конструктору заголовка, чтобы создать этот узел?
А. отдельный пост Переговаривает об использовании другой техники, но это бросает ошибки для меня вокруг мыла, когда я пытаюсь использовать его.
Большая часть других вещей, которые я обнаружил, попадает в необходимость создать что-то удлинение класса абстрактныхphaseInterceptor с кучей дополнительного кода, когда я хочу, так близко :).
Решение
Я смог заставить его работать, используя это после выяснения, что метод мыла в отдельном посте, который я упомянул, нуждался в Saaj-Domp.jar для работы:
List<Header> headers = new ArrayList<Header>()
SOAPFactory sf = SOAPFactory.newInstance()
def authElement = sf.createElement(new QName("http://foo.bar.com/ns", "HeaderInfo"))
def tokenElement = authElement.addChildElement("token")
tokenElement.addTextNode("abc-unique-token")
SoapHeader tokenHeader = new SoapHeader(
new QName("http://foo.bar.com/ns", "HeaderInfo"), authElement);
headers.add(tokenHeader);
proxy.client.getRequestContext().put(Header.HEADER_LIST, headers)
Мне все еще любопытно (и примет ответ) вокруг, который выполняет это рекомендуемый путь CXF и добавляя узел ребенка в класс заголовка.