javax.xml.ws.WebServiceException:未定义的端口类型Java Struts SOAP WSDL
好的,我有一个很奇怪的问题,我今天在谷歌和雅虎一直在寻找解决方案,持续了将近4个小时。我拼命寻找解决办法javax.xml.ws.WebServiceException:未定义的端口类型Java Struts SOAP WSDL,java,soap,wsdl,struts,Java,Soap,Wsdl,Struts,好的,我有一个很奇怪的问题,我今天在谷歌和雅虎一直在寻找解决方案,持续了将近4个小时。我拼命寻找解决办法 public static String [] checkCardAccount(String cardNumber, String cardIssuer, String securityNumber){ URL url = null; try { url = new URL("http://localhost:8999/bankca
public static String [] checkCardAccount(String cardNumber, String cardIssuer, String securityNumber){
URL url = null;
try {
url = new URL("http://localhost:8999/bankcard?wsdl");
} catch (MalformedURLException e) {
e.printStackTrace();
}
QName qname = new QName("http://server.bcard.soap.com/","BankCardImplService");
Service service = Service.create(url,qname);
BankCard bankcard = service.getPort(BankCard.class);
return bankcard.getCardClientData(cardNumber, cardIssuer);
}
上面的代码是我访问SOAP服务的客户机,它在独立的java应用程序中确实有效,但当我将其嵌入java Struts应用程序时,它会显示以下错误
javax.xml.ws.WebServiceException:未定义的端口类型:
{http://bankcard.api.com/}银行卡
com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:349)
在
com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:355)
位于javax.xml.ws.Service.getPort(Service.java:161)
com.api.bankcard.BankCardClient.checkcardcount(BankCardClient.java:25)
在com.action.CardregAction.execute(CardregAction.java:18)中
org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
在
org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
在
org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
在
org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
在
org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:305)
在
org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
在
org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
在
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
在
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
http.HttpServlet.service(HttpServlet.java:717)位于
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
在
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
在
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
在
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
在
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
在
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
在
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
在
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
在
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
在
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
在
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
运行(Thread.java:662)
现在我真的看到问题出在目标名称空间上,因为当我更改它时,错误变为有效服务是{http://bankcard.api.com/}银行卡
我哪里出错了?此代码在Java应用程序上独立运行,但在我的Java Struts web app中不起作用在实现类的@WebService注释中提供EndpointInterface,如果不提供endpoint接口,则在使用getPort方法时必须提到完全限定的端口名
service.getPort(“PortQName”,BankCard.class) 您需要使用
@WebService(name=“BankCard”)
然后可以使用
service.getPort(BankCard.class)代码>
或
如果您只是使用@WebService
对其进行注释,或者为其指定了另一个名称,则需要为getPort()
方法提供更多信息:
替换
BankCard bankcard = service.getPort(BankCard.class);
与
QName port_name = new QName("http://server.bcard.soap.com/","BankCardImplPort");
BankCard bankcard = service.getPort(port_name, BankCard.class);
为我工作,谢谢@WebService(endpointInterface=“com.website.test.CalWebservice”)@anil kumar,您能举个例子说明如何提及完全限定的端口名吗?