Как создать запрос с атрибутами WS-A в Spring-интеграции xml - PullRequest
0 голосов
/ 16 мая 2018

Помогите, пожалуйста, в создании запроса, включающего параметры WS-A От: Для того, чтобы: и т.д.

<int:chain input-channel="msoapInChannel" output-channel="justLog">
<ws:header-enricher >
    <ws:soap-action value="http://yeah.com/Txns/port/sPortType/getesRequest"/>
</ws:header-enricher>
<ws:outbound-gateway uri="http://g.tst.b.l/wsb/router"/>
</int:chain>

Я хочу добавить wsa: От wsa: To к запросу

Ошибка: 1100 Заголовок, представляющий свойство адресации сообщения, не является подарок. (Причина: требуемый элемент заголовка wsa: From отсутствует)

Как это сделать в конфиге на основе xml?

EDIT: Мы создаем запрос и используем JMS-очереди. Запрос выглядит так:

String requestXml =  
"<getnNames xmlns=\"http://b.do.com/DTositeTxns/port\">" +
    "<RequestControl xmlns=\"http://www.im.com/mm/schema\">" + 
"<requestID>123896</requestID>" +
"<DLControl>" + 
    "<requesterName>LW</requesterName>" + 
    "<requesterLocale>RTnl</requesterLocale>" + 
"</DLControl>" +
    "</RequestControl>" +
    "<InquiryParam xmlns=\"http://www.im.com/mm/schema\">" + 
"<tcrmParam name=\"identiftionNumber\">" + bn + "</tcrmParam>" + 
"<tcrmParam name=\"PartficationType\">1000001</tcrmParam>" +
"<tcrmParam name=\"Filter\">ACTIVE</tcrmParam>" + 
    "</InquiryParam>" +
"</getnNames>" ;

TextMessage outMessage = session.createTextMessage(requestXml);

и отправить в очередь. Если я использую soapenv: Body, запрос не будет принят как действительный. Поэтому мой запрос - это только теги внутри тела. Не уверен, как добавить бит заголовка.

Пожалуйста, укажите мне пример, который создает запрос с помощью wsa: To и wsa: From, Related To, Fault to etc

1 Ответ

0 голосов
/ 16 мая 2018

wsa:From и wsa:To являются Element заголовками, они не являются простыми строками, подобными упомянутым soap-action.Там <ws:header-enricher> вам не поможет.

Однако вы все равно можете объявить bean-компонент для простого <int:header-enricher> и предоставить javax.xml.transform.Source для ваших заголовков в качестве значений.

Начиная с версии 5.0 , DefaultSoapHeaderMapper Spring Integration может добавлять элементы в <soapenv:Header>: https://docs.spring.io/spring-integration/docs/5.0.5.RELEASE/reference/html/ws.html#ws-message-headers.

См. Пример документации:

Map<String, Object> headers = new HashMap<>();

String authXml =
     "<auth xmlns='http://test.auth.org'>"
           + "<username>user</username>"
           + "<password>pass</password>"
           + "</auth>";
headers.put("auth", new StringSource(authXml));
...
DefaultSoapHeaderMapper mapper = new DefaultSoapHeaderMapper();
mapper.setRequestHeaderNames("auth");

ОБНОВЛЕНИЕ

У <ws:outbound-gateway> есть атрибут вроде:

<xsd:attribute name="request-callback" type="xsd:string">
            <xsd:annotation>
                <xsd:documentation>
Reference to a Spring Web Services WebServiceMessageCallback. This enables changing
the Web Service request message after the payload has been written to it but prior
to invocation of the actual Web Service.
                </xsd:documentation>
                <xsd:appinfo>
                    <tool:annotation kind="ref">
                        <tool:expected-type type="org.springframework.ws.client.core.WebServiceMessageCallback"/>
                    </tool:annotation>
                </xsd:appinfo>
            </xsd:annotation>
        </xsd:attribute>

Итак, вам нужно настроитьbean для ActionCallback и ссылаться на него из этого атрибута.

Подробнее о ActionCallback можно найти в справочном руководстве Spring WS .

...