Как изменить пространство имен сообщения 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.
Это все по памяти, так что вам нужно проверить.