2012-11-16 27 views
5

ok Mam naprawdę dziwny problem, że wciąż szukam rozwiązania w Google i Yahoo przez prawie 4 godziny dzisiaj. I desperacko szukam rozwiązania.javax.xml.ws.WebServiceException: Niezdefiniowany typ portu Struts Java 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); 
    } 

powyższy kod jest mój klient dostępu do usługi SOAP, to naprawdę działa w aplikacji standalone java ale kiedy osadzić go do mojej aplikacji Java Struts mówi następujący błąd poniżej

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

Teraz naprawdę widzę, że problem jest nazw cel bo jak mogę ją zmienić zmiany błędach, które mówi, że ważne usługi jest {http://bankcard.api.com/}BankCard

gdzie poszło źle? ten kod działa autonomicznie w aplikacji Java, ale nie w mojej aplikacji WWW Java Struts

Odpowiedz

5

podać endpointIneterface w adnotacji @WebService w klasie implementacji, jeśli nie podasz interfejsu punktu końcowego, musisz podać pełną nazwę portu podczas korzystania z metody getPort .

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

+1

pracował dla mnie, dzięki. @WebService (endpointInterface = "com.website.test.CalWebservice") – BustedSanta

+0

@anil kumar, czy mógłbyś pokazać przykład jak w pełni kwalifikować nazwę portu? – Alexandr

1

Trzeba opisywanie klasę BankCardImpl z @WebService(name="BankCard")
Następnie można użyć service.getPort(BankCard.class);

LUB

Jeśli tylko opisywanie go @WebService lub dały mu inną nazwę, a następnie trzeba będzie dostarczyć więcej informacji do metody getPort():

wymienić

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

z

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