Может ли клиент, сгенерированный из WSDL, генерировать запросы, которые исключают необязательные элементы заголовка? - PullRequest
2 голосов
/ 24 ноября 2011

Я создаю клиент, используя сгенерированный код jax-ws. Используемые WSDL определяют количество элементов заголовка, например, внутри элемента привязки:

<wsdl:operation name="operation">
    <wsoap12:operation soapActionRequired="false" style="document"/>
    <wsdl:input>
        <wsoap12:header message="tns:InMsg" part="header1" use="literal"/>
        <wsoap12:header message="tns:InMsg" part="header2" use="literal"/>
        <wsoap12:header message="tns:InMsg" part="header3" use="literal"/>
        <wsoap12:header message="tns:InMsg" part="header4" use="literal"/>     
        <wsoap12:header message="tns:InMsg" part="header5" use="literal"/>
        <wsoap12:body parts="request" use="literal"/>
    </wsdl:input>
    <wsdl:output>
        <wsoap12:header message="tns:OutMsg" part="header1" use="literal"/>
            <wsoap12:header message="tns:OutMsg" part="header2" use="literal"/>
            <wsoap12:body parts="response" use="literal"/>
    </wsdl:output>
    <wsdl:fault name="standardError">
        <wsoap12:fault name="standardError" use="literal"/>
    </wsdl:fault>
</wsdl:operation>

Ради вопроса, мой вопрос сосредоточен вокруг header5. В соответствии со спецификациями, с которыми я работаю, это необязательное значение. Таким образом, я генерирую свой клиент с использованием JAX-WS и должен либо передать значение null (для имитации значения, которое не указано), либо действительное значение заголовка в качестве параметра операции для значения header5, которое будет добавлено в запрос. Это впоследствии создаст элемент <header5> без дочерних элементов. Затем я сталкиваюсь с проблемой, заключающейся в том, что служба-потребитель, по-видимому, выполняет какую-то проверку этого элемента заголовка и определяет, что он искажен, поскольку обычно он содержит несколько различных дочерних элементов.

Есть ли способ, с помощью JAX-WS, по существу удовлетворить это необязательное требование заголовка, исключив элемент заголовка altogther из запроса SOAP? Похоже, что среди моих коллег существует определенное противоречие относительно того, не нарушит ли это контракт, определенный WSDL, и приведет ли служба к возврату ошибки. Существует утверждение, что клиенты .Net позволяют исключить заголовок из запроса, просто указав его как ноль.

1 Ответ

1 голос
/ 25 ноября 2011

Покопавшись и поговорив с несколькими людьми, мне удалось ответить на мой собственный вопрос.Используя обработчик сообщений SOAP, я могу передать список имен заголовков для удаления, и они удаляются из запроса, если они присутствуют.Этот сайт был неоценим в том, чтобы вывести меня на правильный путь:

http://technology.amis.nl/blog/12004/how-to-remove-unwanted-soap-header-elements-in-jax-ws

...