【问题标题】:Error when calling web service from Domino从 Domino 调用 Web 服务时出错
【发布时间】:2012-07-03 14:50:24
【问题描述】:

我需要通过它的 SOAP Web 服务连接到一个 .net 应用程序,但无法从 Domino 中运行它。使用 XPages 我想连接到 Web 服务以将数据返回到 xpage。我尝试创建一个代理来拨打电话,但没有奏效。我在运行代理时收到以下 java StackTrace:

WebServiceEngineFault
 faultCode: {http://www.lotus.com/domino/ws/}HTTP
 faultSubcode:
 faultString: (401) Unauthorized
 faultActor:
 faultNode:
 faultDetail:
        {}string:

(401) Unauthorized
        at lotus.domino.axis.transport.http.HTTPSender.readFromSocket(Unknown Source)
        at lotus.domino.axis.transport.http.HTTPSender.invoke(Unknown Source)
        at lotus.domino.axis.strategies.InvocationStrategy.visit(Unknown Source)
        at lotus.domino.axis.SimpleChain.doVisiting(Unknown Source)
        at lotus.domino.axis.SimpleChain.invoke(Unknown Source)
        at lotus.domino.axis.client.AxisClient.invoke(Unknown Source)
        at lotus.domino.axis.client.Call.invokeEngine(Unknown Source)
        at lotus.domino.axis.client.Call.invoke(Unknown Source)
        at lotus.domino.axis.client.Call.invoke(Unknown Source)
        at lotus.domino.axis.client.Call.invoke(Unknown Source)
        at lotus.domino.axis.client.Call.invoke(Unknown Source)
        at lotus.domino.websvc.client.Call.invoke(Unknown Source)
        at com.imanage.worksite.IWOVServicesSoapStub.getFolders(Unknown Source)
        at JavaAgent.NotesMain(Unknown Source)
        at lotus.domino.AgentBase.runNotes(Unknown Source)
        at lotus.domino.NotesThread.run(Unknown Source)

我可以通过soapUI成功调用它,传入用户ID、密码和域凭据。

我在使用 Web 服务的代理中设置凭据:

                            String arg0 = "DOMAINNAME\\USERID";
                            String arg1 = "PASSWORD";
                            stub.setCredentials(arg0, arg1);

以及 Web 服务使用者本身(在 SoapStub 类中 - 在 getFolders 调用中):

                    _call.setUsername("DOMAINNAME\\USERID");
                    _call.setPassword("PASSWORD");

我是 XPages 和 Java 的新手。有没有人知道我可能遗漏了什么或应该检查什么?

(由于 WSDL 生成的变量名太长,我不能将 Lotusscript 用于 Web 服务使用者,所以在这种情况下我必须使用 java)。

【问题讨论】:

    标签: web-services xpages lotus-domino


    【解决方案1】:

    在这些情况下,为了帮助缩小范围,最好让 SOAPUI 进行完整的测试。

    所以请执行以下操作。

    1. 从提供者的 WSDL 在 SOAPUI 中创建一个模拟服务。

    2. 将您的代理指向模拟服务,以便您可以捕获代理发送的内容。 (即捕获 SOAP 请求)。

    3. 使用相同的 SOAP 请求,通过 SOAPUI 将其发送到 .NET 服务器。它应该重现该问题并为您提供有关失败原因的更多信息。

    以下 wiki 文章解释了如何执行此操作。

    http://www-10.lotus.com/ldd/ddwiki.nsf/dx/Testing_your_Domino_web_service_provider_and_consumer_using_SoapUI._

    【讨论】:

    • domino 生成的请求在soapUI 中运行良好。我按照以下步骤操作:我创建了模拟服务并运行它。将代理中的端点更改为指向模拟服务。在soapUI 中运行产生soap 请求的代理。接受该请求并在soapUI中运行它,生成的响应没有任何错误,从.net服务返回信息。
    • 您在 SOAPUI 中进行了哪些更改?您是否正在修改用户名/密码?如果没有,您可能需要使用诸如wireshark之​​类的东西来拦截流量,以查看返回故障代码的服务器会发生什么。
    • 不,我不会更改soapui 中的用户名或密码——它是一样的。我来看看wireshark。感谢您的提示。
    【解决方案2】:

    我会使用 CXF,它似乎更好supported in XPages。您使用的是什么身份验证?我发现摘要身份验证可能不适用于 .net 中的某些服务(Sharepoint 数据是一个),您需要调用另一个端点来获取摘要令牌。我使用 TCPMon(跨平台)或 Fiddler 来查看网络上的内容(您将这些工具配置为代理,因此您可以观看)AD107 可能还有其他信息,看看。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-13
      • 2016-01-25
      • 1970-01-01
      • 2015-12-29
      相关资源
      最近更新 更多