从Domino调用Web服务时出错

时间:2012-07-02 09:20:46

标签: web-services xpages lotus-domino

我需要通过它的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的新手。有没有人有任何想法,我可能会缺少或应该检查?

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

2 个答案:

答案 0 :(得分:0)

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

所以做以下事情。

  1. 从提供程序的WSDL在SOAPUI中创建模拟服务。

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

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

  4. 以下Wiki文章介绍了如何执行此操作。

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

答案 1 :(得分:0)

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