1

我使用 Atelier 的向导创建了一个肥皂客户端连接,它创建了所有消息(请求和响应)和业务操作对象。

此soap 连接将用于与其他SOAP Web 服务连接(更改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>

有没有办法以编程方式更改节点的命名空间?

最好的问候, Kurro López

4

1 回答 1

0

我看不到你的代码来提供细节,但是当创建客户端对象时,它应该有一个 %SOAP.SessionHeader ,它有一个 NAMESPACE 属性。它应该附加到 SOAP.WebClient 的 HeadersOut 属性

不过,这一切都来自记忆,因此您需要检查。

于 2021-10-07T16:18:48.683 回答