gpt4 book ai didi

java - 如何在 Netbeans 中使用具有 SOAP 身份验证 header 的 .NET Web 服务

转载 作者:行者123 更新时间:2023-12-01 05:51:20 24 4
gpt4 key购买 nike

我正在尝试使用在 .NET 中创建的需要 SOAP 身份验证的 Web 服务。您最感兴趣的部分是:

<s:element name="SoapAuthenticationHeader" type="tns:SoapAuthenticationHeader" /> 
<s:complexType name="SoapAuthenticationHeader">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="Username" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="Password" type="s:string" />
</s:sequence>
<s:anyAttribute />
</s:complexType>

我能够成功使用 Netbeans 中的 Web 服务。但我无法使用它,因为在自动生成的 stub /方法中,我无法输入用户名和密码进行身份验证。

Netbeans 自动生成的 stub 包括以下内容:

JAX-WS

try { // Call Web Service Operation
org.tempuri.TeleCast service = new org.tempuri.TeleCast();
org.tempuri.TeleCastSoap port = service.getTeleCastSoap();
// TODO initialize WS operation arguments here
int campaignid = 0;
java.lang.String to = "";
java.lang.String from = "";
java.lang.String subject = "";
java.lang.String body = "";
java.lang.String uniqueid = "";
// TODO process result here
boolean result = port.queueRealTimeEmail(campaignid, to, from, subject, body, uniqueid);
System.out.println("Result = "+result);
} catch (Exception ex) {
// TODO handle custom exceptions here
}

JAX-RPC

try { // This code block invokes the TeleCastSoap:queueRealTimeEmail operation on web service
telecastclient.TeleCast teleCast = new telecastclient.TeleCast_Impl();
telecastclient.TeleCastSoap teleCastSoap = teleCast.getTeleCastSoap();
teleCastSoap.queueRealTimeEmail(/* TODO enter operation arguments*/);
} catch(javax.xml.rpc.ServiceException ex) {
java.util.logging.Logger.getLogger(telecastclient.TeleCast.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch(java.rmi.RemoteException ex) {
java.util.logging.Logger.getLogger(telecastclient.TeleCast.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch(Exception ex) {
java.util.logging.Logger.getLogger(telecastclient.TeleCast.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}

至少当我使用 JAX-WS 方法时,我得到一个名为 SoapAuthenticationHeader 的类,我可以在其中设置用户名和密码。但我不知道如何在调用 Web 服务之前或同时传递 SoapAuthenticationHeader 的该对象以执行各种操作。

org.tempuri.SoapAuthenticationHeader auth = new SoapAuthenticationHeader();
auth.setUsername("username");
auth.setPassword("password");

我在 JAX-RPC 方法中没有此选项。

对此的任何意见将不胜感激。预先感谢您的宝贵时间。

最佳答案

看起来没有优雅的方法可以从默认的 Netbeans IDE 中执行此操作。

我在 Eclipse 上尝试了同样的方法,在我的所有搜索中,我找到了这个 Apache Axis2 - Code Generator Wizard Guide for Eclipse Plug-in for Eclipse (我仍然无法发布链接因为我是新手)。

在使用上述插件(WSDL2Java 的某种 eclipse 插件)时,它生成了 stub 以及正确的 SoapAuthenticationHeader 对象,我可以将其传递以进行验证。

所以我现在的代码是:

TeleCastStub stub = new TeleCastStub();

SoapAuthenticationHeader auth = new SoapAuthenticationHeader();
auth.setUsername(username);
auth.setPassword(password);

QueueRealTimeEmail pageObj = new QueueRealTimeEmail();
pageObj.setFrom(from);
pageObj.setTo(to);
pageObj.setSubject(subject);
pageObj.setBody(body);

SoapAuthenticationHeaderE authE = new SoapAuthenticationHeaderE();
authE.setSoapAuthenticationHeader(auth);

QueueRealTimeEmailResponse response = stub.queueRealTimeEmail(pageObj, authE);

效果很好。

现在这让我提出了几个问题:

  1. 我的做法是使用axis2插件,我的代码片段,这是正确的做法吗?有时我有这样的感觉:我只需将 hack 放在一起即可获得工作完成了,我一直很感兴趣寻找正确的方法以便我接下来可以做得更好时间。
  2. 当我使用内置代码时用 eclipse 生成向导,我注意到它有一个 Axis 选项运行时而不是 Axis2。所以现在我的问题是;对于旧版本轴或使用预构建工具IDE,使用 Web 服务特殊的身份验证 header 做不到吗?它更多的是架构限制吗?

再次感谢您的宝贵时间。

这 block 板太棒了,SO!多次拯救了我的隐藏。所以现在轮到我回馈社区了。

关于java - 如何在 Netbeans 中使用具有 SOAP 身份验证 header 的 .NET Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4587239/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com