Как изменить пространство имен сообщения Soap ns2 в% SOAP.Webclient

Я создал соединение с мыльным клиентом с помощью мастера Atelier, и он создал все сообщения (запрос и ответ) и объект бизнес-операции.

Это мыльное соединение будет использоваться для подключения к другим веб-службам SOAP (изменение URL-адреса), но пространство имен конверта будет отличаться для места назначения.

Я внес изменения в класс Soap, чтобы добавить свое пространство имен для конверта.

      Property Namespace As %String
Parameter SETTINGS = "Namespace:Basic";
Method methodFind(idEspecialist As %String(REQUIRED=1), actList As %ListOfObjects(Myapp.ns2.actType") [ Final, ProcedureBlock = 1, SoapBindingStyle = document, SoapBodyUse = literal, WebMethod ]
 {
 Quit ..WebMethod("methodFind").Invoke($this,..Namespace_"/methodFind",.idEspecialist,.actList)
 }

и это работает, только мне нужно создать новый элемент BO в продукте и установить пространство имен для места назначения.

Но ns.actType имеет пространство имен свойств в определении (как я уже сказал, этот объект был создан с помощью мастера Atelire (SOAP)), и он используется для всех BO.

      /// created from: http://mywsservice.salutic.org/EspecialistWS?wsdl=EspecialistWSSoap.wsdl
Class Myapp.ns2.actoType Extends (%SerialObject, %XML.Adaptor) [ ProcedureBlock ]
{

Parameter ELEMENTQUALIFIED = 1;

Parameter NAMESPACE = "http://mywsservice.salutic.org/";

Parameter XMLNAME = "actType";

Parameter XMLSEQUENCE = 1;

Property ActCode As %String(MAXLEN = "", XMLNAME = "ActCode") [ Required ];

Property description As  %String(MAXLEN = "", XMLNAME = "description") [ Required ];
......
......
}

Итак, когда метод invokeClient создает конверт SOAP, он выглядит так:

      <?xml version="1.0" encoding="UTF-8" ?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:s='http://www.w3.org/2001/XMLSchema'>
  <SOAP-ENV:Body>
    <methodFind xmlns="http://customer.namespace.org/">
        <idEspecialist xsi:type="s:string">TAC</idEspecialist>
        <actList>
            <act xmlns:s01="http://mywsservice.salutic.org/" xsi:type="s01:actoType">
                <ActCode xsi:type="s:string">1032001</ActCode>
                <description xsi:type="s:string">Torax</description>
            </act>
        </actList>
    </methodFind>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Есть ли способ программно изменить пространство имен узла?

С уважением, Курро Лопес

1 ответ

Я не вижу в вашем коде подробностей, но когда создается клиентский объект, он должен иметь%SOAP.SessionHeader со свойством NAMESPACE. Его следует прикрепить к свойству HeadersOut SOAP.WebClient.

Это все по памяти, так что вам нужно проверить.

Другие вопросы по тегам