簡體   English   中英

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

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

好吧,我真的有一個奇怪的問題,我今天在谷歌和雅虎尋找解決方案近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);
    }

上面的代碼是我訪問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.commons.chain.impl.ChainBase.execute(ChainBase.java:191)at org .apache.struts.chain.ComposableRequestProces 位於org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)的sor.process(ComposableRequestProcessor.java:283)位於javax的org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462) .servlet.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。在Org.apache上的org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)中調用(StandardContextValve.java:191) .catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)org.apache.catalina.connector.CoyoteAdapter.service(Coyot) eAdapter.java:298)org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)atg.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process(Http11Protocol.java:588)at org.apache java.lang.Thread.run中的.tomcat.util.net.JIoEndpoint $ Worker.run(JIoEndpoint.java:489)(Thread.java:662)

現在我真的看到問題是目標命名空間,因為當我更改它時,錯誤會更改為它表示有效服務是{http://bankcard.api.com/}BankCard

哪里出錯了? 此代碼在Java Application上獨立運行,但在Java Struts Web應用程序中不運行

在實現類的@WebService注釋中給出endpointIneterface,如果你不提供端點接口,你必須在使用getPort方法時提到完全限定的端口名。

service.getPort( “PortQName”,BankCard.class);

您需要使用@WebService(name="BankCard")注釋BankCardImpl
然后,您可以使用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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM