如果从服务器调用Web服务客户端失败:如果从Junit(本地)调用,则成功调用

 手机用户2602901335 发布于 2023-02-08 16:59

我正在使用jboss 7并使用CXF框架构建webservice客户端.

我编写了一个特定的Web服务客户端来调用部署在远程服务器中的Web服务.

如果从Junit测试用例调用此Web服务客户端,则webservice调用成功,我们从服务器获得有效的xml响应.

但是如果从服务器调用相同的webservice客户端(webservice客户端本身被部署为webapp),那么它会抛出异常:

Caused by: javax.xml.ws.soap.SOAPFaultException: Could not find conduit initiator for address: 
                                http://10.100.20.101/metavante1/ConnectwareWS/DPAcctTxnInqWSV1
                         and transport: http://schemas.xmlsoap.org/soap/http
        at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:156)
        at sun.proxy.$Proxy137.dpAcctTxnInq(Unknown Source)
        at webservice.client.hsa.MetavanteHSAPort.getAccountDetails(MetavanteHSAPort.java:1785) [webserviceclient.jar:]
        ... 34 more
Caused by: java.lang.RuntimeException: Could not find conduit initiator for address: 
                                http://10.100.20.101/metavante1/ConnectwareWS/DPAcctTxnInqWSV1
                         and transport: http://schemas.xmlsoap.org/soap/http
        at org.apache.cxf.binding.soap.SoapTransportFactory.getConduit(SoapTransportFactory.java:225)
        at org.apache.cxf.endpoint.AbstractConduitSelector.getSelectedConduit(AbstractConduitSelector.java:110)
        at org.apache.cxf.endpoint.UpfrontConduitSelector.prepare(UpfrontConduitSelector.java:63)
        at org.apache.cxf.endpoint.ClientImpl.prepareConduitSelector(ClientImpl.java:850)
        at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:525)
        at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:463)
        at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:366)
        at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:319)
        at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:96)
        at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:134)
        ... 36 more

在这种情况下,URL http://10.100.20.101/metavante1/ConnectwareWS/DPAcctTxnInqWSV1是从一个在XML文件中设置的spring bean中获取的.

以下是webservice客户端的代码:

public HSAAccountDetailsBn getAccountDetails(String bankAccNum)
            throws ServiceException
    {
        HSAAccountDetailsBn detailsBn = new HSAAccountDetailsBn();

        try{
          URL wsdl = WebServiceClientUtil.getResourceAsURL("wsdl/clients/Metavante/DPAcctTxnInqWSV1.wsdl");
          MtvnCWDPAcctTxnInqWSV1 service = new MtvnCWDPAcctTxnInqWSV1(wsdl);
          MtvnCWDPAcctTxnInqWSV1Interface port = service
                    .getMtvnCWDPAcctTxnInqWSV1Port();

          BindingProvider provider = (BindingProvider) port;
          provider.getRequestContext().put(
          BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
          this.getServiceEndpointAcctTxnInq()
          );

          System.out.println("Invoking dpAcctTxnInq...");

          webservice.client.metavante.deposit.acctTrxnEnquiry.ObjectFactory obj = new webservice.client.metavante.deposit.acctTrxnEnquiry.ObjectFactory();

          DPAcctTxnInqMtvnSvcReq dpAcctTxnInqReq = obj
                    .createDPAcctTxnInqMtvnSvcReq();
          dpAcctTxnInqReq.setMtvnSvcVer("1.0");
          dpAcctTxnInqReq.setMsgUUID("11111111-1111-1111-1111-111111111114");

          DPAcctTxnInqMtvnSvcReq.PrcsParms prcsParms = obj
                    .createDPAcctTxnInqMtvnSvcReqPrcsParms();

          prcsParms.setSrcID("GJL747");
          prcsParms.setTestInd("Y");          
          dpAcctTxnInqReq.setPrcsParms(prcsParms);

          DPAcctTxnInqMtvnSvcReq.Svc svc = obj
                    .createDPAcctTxnInqMtvnSvcReqSvc();

          DPAcctTxnInqMtvnSvcReq.Svc.SvcParms svcParms = obj
                    .createDPAcctTxnInqMtvnSvcReqSvcSvcParms();

          svcParms.setApplID("DP");
          svcParms.setRoutingID(getRoutingId());
          svcParms.setRqstUUID("11111111-1111-1111-1111-111111111114");
          svcParms.setSvcID("DPAcctTxnInq");
          svcParms.setSvcVer("1.0");
          svc.setSvcParms(svcParms);

          DPAcctTxnInqMtvnSvcReq.Svc.Security security = obj
                    .createDPAcctTxnInqMtvnSvcReqSvcSecurity();

          DPAcctTxnInqMtvnSvcReq.Svc.Security.BasicAuth basicAuth = obj
                    .createDPAcctTxnInqMtvnSvcReqSvcSecurityBasicAuth();

          basicAuth.setUsrID(this.getUsernameDeposit());
          basicAuth.setPwd(this.getPasswordDeposit());
          security.setBasicAuth(basicAuth);
          svc.setSecurity(security);

          DPAcctTxnInqMtvnSvcReq.Svc.MsgData msgData = obj
                    .createDPAcctTxnInqMtvnSvcReqSvcMsgData();
          DPAcctTxnInqReqData dpAcctInqReqData = obj
                    .createDPAcctTxnInqReqData();

          if (!CommonSupportUtil.isNull(bankAccNum))
          {
              dpAcctInqReqData.setE20007(bankAccNum); // account number
          }

          dpAcctInqReqData.setE310129("N");
          dpAcctInqReqData.setE310130("N");
          dpAcctInqReqData.setE310128("Y");

          msgData.setDPAcctTxnInqReqData(dpAcctInqReqData);
          svc.setMsgData(msgData);

          dpAcctTxnInqReq.getSvc().add(svc);

          DPAcctTxnInqMtvnSvcRes dpAcctTxnInqRes = port
                    .dpAcctTxnInq(dpAcctTxnInqReq);

          List resSvclist = dpAcctTxnInqRes.getSvc();
          DPAcctTxnInqMtvnSvcRes.Svc resSvc = resSvclist.get(0);
          DPAcctTxnInqResData resData = resSvc.getMsgData()
                    .getDPAcctTxnInqResData();

          String returnStatus = dpAcctTxnInqRes.getErrCde();

          if (returnStatus.equalsIgnoreCase("0"))
            {
                detailsBn.setAccruedInterest(new Double(resData.getE20638()));
                detailsBn.setAvailableBalance(new Double(resData.getE21667()));
                detailsBn.setClosingBalance(new Double(resData.getE20167()));
                detailsBn.setCurrentBalance(new Double(resData.getE21661()));
                detailsBn.setLedgerBalance(new Double(resData.getE21632()));

                String openIndicator = resData.getE20276();
                detailsBn.setOpenIndicator(openIndicator);
                String dormantIndicator = resData.getE20277();
                detailsBn.setDormantIndicator(dormantIndicator);

            }
            else
            {
                throw new ServiceException("Could not access Metavante Deposit system ");
            }

        }
        catch (SOAPFaultException e) {
            throw new ServiceException(
                    "Vendor is intercepting the request but it is not returning the data. "
                            + "This can mean that either they are not servicing request at this moment "
                            + "at all or they are unable to service this request.",
                    e);

        } 

        return detailsBn;

    }//Method ends

我看了一些关于这类问题的帖子,但没有一个能正确解决我的问题.

我无法弄清楚Junit与jboss应用服务器之间的Web服务客户端调用之间的区别.

1 个回答
  • cxf-rt-transports-http-jetty正如这里所建议的,添加依赖性为我解决了它.

    2023-02-08 17:02 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有