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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/13417454/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-31 12:38:28  来源:igfitidea点击:

javax.xml.ws.WebServiceException: Undefined port type Java Struts SOAP WSDL

javasoapwsdlstruts

提问by Netorica

ok I have really a strange problem that I keep looking for solution in google and yahoo for almost 4 hours today. And I desperately looking for a solution.

好的,我真的有一个奇怪的问题,今天我一直在 google 和 yahoo 中寻找解决方案将近 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);
    }

the above code is my client for accessing the SOAP service, it really works in a standalone java application but when I embed it to my Java Struts application it says the following error below

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

javax.xml.ws.WebServiceException: Undefined port type: {http://bankcard.api.com/}BankCard at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:349) at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:355) at javax.xml.ws.Service.getPort(Service.java:161) at com.api.bankcard.BankCardClient.checkCardAccount(BankCardClient.java:25) at com.action.CardregAction.execute(CardregAction.java:18) at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58) at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67) at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51) at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191) at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:305) at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191) at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913) at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Thread.java:662)

javax.xml.ws.WebServiceException:未定义的端口类型:{http://bankcard.api.com/}com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:349) 上的BankCard .sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:355) 在 javax.xml.ws.Service.getPort(Service.java:161) 在 com.api.bankcard.BankCardClient.checkCardAccount(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) at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191) at org.apache.struts.chain.ComposableRequestProcessor。 process(ComposableRequestProcessor.java:283) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913) at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462) at javax.servlet .http.HttpServlet.service(HttpServlet.java:637) 在 javax.servlet.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.ErrorValve .invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) at org. apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) at org.apache.tomcat.util.net.JioEndpoint$ Worker.run(JioEndpoint.java:489) 在 java.lang.Thread.run(Thread.java:662)apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invardEngineValve(StandardEngineValve.invoke(StandardEngineValve.invoke) 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) 在 java.lang.Thread.run(Thread.java:662) )apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invardEngineValve(StandardEngineValve.invoke(StandardEngineValve.invoke) 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) 在 java.lang.Thread.run(Thread.java:662) )StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) at org .apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 在 org.apache.tomcat.util.net.JioEndpoint$Worker.run(JioEndpoint.java:489) 在 java.lang.Thread.run (线程.java:662)StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) at org .apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 在 org.apache.tomcat.util.net.JioEndpoint$Worker.run(JioEndpoint.java:489) 在 java.lang.Thread.run (线程.java:662)[489] 第489话[489] 第489话

Now I really see that the problem is the target namespace because as I change it the error changes to that it says that the valid services is {http://bankcard.api.com/}BankCard

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

where I went wrong? this code works on standalone on Java Application but not in my Java Struts web app

我哪里出错了?此代码可在 Java 应用程序上独立运行,但不适用于我的 Java Struts Web 应用程序

回答by anil kumar

give endpointIneterface in @WebService annotation in the implementation class, if you dont give endpoint interface, you have to mention fully qualified port name while using getPort method.

在实现类的@WebService注解中给endpointIneterface,如果不给endpoint接口,在使用getPort方法的时候必须提到全限定端口名。

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

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

回答by MrCelticFox

You need to annotate the BankCardImplclass with @WebService(name="BankCard")
You can then use service.getPort(BankCard.class);

你需要BankCardImpl@WebService(name="BankCard")
你的类注释然后可以使用service.getPort(BankCard.class);

OR

或者

If you just annotate it with @WebServiceor have given it another name, then you will need to provide more information to the getPort()method:

如果您只是用注释@WebService或给它另一个名称,那么您需要为该getPort()方法提供更多信息:

replace

代替

BankCard bankcard = service.getPort(BankCard.class);

with

QName port_name = new QName("http://server.bcard.soap.com/","BankCardImplPort");
BankCard bankcard = service.getPort(port_name, BankCard.class);