java – 从服务器调用Web服务客户端失败:如果从Junit(本地)调用,则成功调用
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 从服务器调用Web服务客户端失败:如果从Junit(本地)调用,则成功调用,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5651字,纯文字阅读大概需要9分钟。
内容图文
![java – 从服务器调用Web服务客户端失败:如果从Junit(本地)调用,则成功调用](/upload/InfoBanner/zyjiaocheng/756/4a94c10dd1cc4d6bb2191150a156d101.jpg)
我正在使用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
在这种情况下,从一个在XML文件中设置的spring bean中获取URL http://10.100.20.101/metavante1/ConnectwareWS/DPAcctTxnInqWSV1.
以下是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<DPAcctTxnInqMtvnSvcRes.Svc> 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服务客户端调用之间的区别.
解决方法:
正如here建议的那样,添加对cxf-rt-transports-http-jetty的依赖为我解决了这个问题.
内容总结
以上是互联网集市为您收集整理的java – 从服务器调用Web服务客户端失败:如果从Junit(本地)调用,则成功调用全部内容,希望文章能够帮你解决java – 从服务器调用Web服务客户端失败:如果从Junit(本地)调用,则成功调用所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。