С CXF (фактически Groovyws), как я могу генерировать заголовок мыла с одним дочерним узлом, имеющим текстовый узел?

StackOverflow https://stackoverflow.com/questions/3807922

Вопрос

Я создаю 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 и добавляя узел ребенка в класс заголовка.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top