javax.xml.ws.WebServiceException:未定义的端口类型Java Struts SOAP WSDL

Mp *_*ega 5 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/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);
    }
Run Code Online (Sandbox Code Playgroud)

上面的代码是我访问SOAP服务的客户端,它确实可以在一个独立的java应用程序中运行,但是当我将它嵌入到我的Java Struts应用程序时,它会在下面显示以下错误

javax.xml.ws.WebServiceException:未定义的端口类型:com.com的com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:349)上的{http://bankcard.api.com/}BankCard位于com.api.bankcard.BankCardClient.checkCardAccount(BankCardClient)的javax.xml.ws.Service.getPort(Service.java:161)中的.sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:355) .java:25)在org.apache.struts的org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)的com.action.CardregAction.execute(CardregAction.java:18).在org.apache.commons.chain.impl.ChainBase.execute中的org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)上的chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67) ChainBase.java:191)在org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:305)位于org.apache.smons.chain.ComposableRequestProcessor的org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191).位于org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)的进程(ComposableRequestProcessor.java:283)位于javax.servlet的org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462) .http.HttpServlet.service(HttpServlet.java:637),位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)的javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 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)at 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)at org.apache.tomcat.util.net.JIoEndpoint $ java.lang.Thread.run上的Worker.run(JIoEndpoint.java:489)(Thread.java:662)apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)at 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)at org.apache.coyote.http11 .http11Protocol $ Http11ConnectionHandler.process(Http11Protocol.java:588)atg.apache.tomcat.util.net.JIoEndpoint $ Worker.run(JIoEndpoint.java:489)at java.lang.Thread.run(Thread.java:662 )apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)at 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)at org.apache.coyote.http11 .http11Protocol $ Http11ConnectionHandler.process(Http11Protocol.java:588)atg.apache.tomcat.util.net.JIoEndpoint $ Worker.run(JIoEndpoint.java:489)at java.lang.Thread.run(Thread.java:662 )org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)上的StandardEngineValve.invoke(StandardEngineValve.java:109)位于org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)org .apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process(Http11Protocol.java:588)atg.apache.tomcat.util.net.JIoEndpoint $ Worker.run(JIoEndpoint.java:489)at java.lang.Thread.run (Thread.java:662)org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)上的StandardEngineValve.invoke(StandardEngineValve.java:109)位于org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)org .apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process(Http11Protocol.java:588)atg.apache.tomcat.util.net.JIoEndpoint $ Worker.run(JIoEndpoint.java:489)at java.lang.Thread.run (Thread.java:662)489)在java.lang.Thread.run(Thread.java:662)489)在java.lang.Thread.run(Thread.java:662)

现在我真的看到问题是目标命名空间,因为当我更改它时,错误会更改为它表示有效的服务 {http://bankcard.api.com/}BankCard

哪里出错了?此代码在Java Application上独立运行,但在Java Struts Web应用程序中不运行

小智 6

在实现类的@WebService注释中给出endpointIneterface,如果你不提供端点接口,你必须在使用getPort方法时提到完全限定的端口名.

service.getPort( "PortQName",BankCard.class);