2012-11-16 20 views
5

ok我真的有一個奇怪的問題,我一直在谷歌和雅虎尋找解決方案近4個小時。我拼命尋找解決方案。javax.xml.ws.WebServiceException:未定義的端口類型Java Struts SOAP WSDL

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://bankbank.api.com/}BankCard com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:349) 在 com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:355) at javax.xml.ws.Service.getPort(Service.java:161)at com.action.CardregAction.execute com.api.bankcard.BankCardClient.checkCardAccount(BankCardClient.java:25) (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) 在 有機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) 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.ApplicationFilt erChain.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.tomcat org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process(Http11Protocol.java:588) .util.net.JIoEndpoint $ Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Thread。Java的:662)

現在我真的看到了問題的目標命名空間,因爲我改變它的錯誤更改,它說的是,有效的服務是{http://bankcard.api.com/}BankCard

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

回答

5

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

service.getPort(「PortQName」,BankCard.class);

+1

爲我工作,謝謝。 @WebService(endpointInterface =「com.website.test.CalWebservice」) – BustedSanta

+0

@anil kumar,你能舉一個例子說明如何提及完全合格的端口名稱嗎? – Alexandr

1

您需要@WebService(name="BankCard")
註釋的BankCardImpl類,那麼您可以使用service.getPort(BankCard.class);

OR

如果你只是用@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); 
相關問題