使用轴 1.4 设置自定义 SOAP 标头

2022-09-03 17:21:17

我正在尝试使用安讯士使用 .NET 2.0 Web 服务。我使用Eclipse WST插件生成了Web服务客户端,到目前为止似乎还可以。

下面是预期的 SOAP 标头:

<soap:Header>
<Authentication xmlns="http://mc1.com.br/">
    <User>string</User>
    <Password>string</Password>
</Authentication>
</soap:Header>

我没有找到有关如何从安讯士客户端配置此标头的任何文档。当我使用 Visual Studio C# Express 2008 生成客户端时,它会生成一个以两个 String 属性 ( 和 ) 命名的类,并且所有客户端方法都会接收该类的对象作为第一个参数,但对于 Axis WS 客户端,这种情况不会发生。AuthenticationUserPassword

如何在客户端调用中设置此标头?


答案 1

也许你可以使用方法?像这样:org.apache.axis.client.Stub.setHeader

MyServiceLocator wsLocator = new MyServiceLocator();
MyServiceSoap ws = wsLocator.getMyServiceSoap(new URL("http://localhost/MyService.asmx"));

//add SOAP header for authentication
SOAPHeaderElement authentication = new SOAPHeaderElement("http://mc1.com.br/","Authentication");
SOAPHeaderElement user = new SOAPHeaderElement("http://mc1.com.br/","User", "string");
SOAPHeaderElement password = new SOAPHeaderElement("http://mc1.com.br/","Password", "string");
authentication.addChild(user);
authentication.addChild(password);
((Stub)ws).setHeader(authentication);

//now you can use ws to invoke web services...

答案 2

如果你有一个用 userid 和密码表示容器的对象,你可以这样做:Authentication

import org.apache.axis.client.Stub;

//...

MyAuthObj authObj = new MyAuthObj("userid","password");
((Stub) yourServiceObject).setHeader("urn://your/name/space/here", "partName", authObj);

推荐