2012-11-16 9 views
5

ठीक है, मुझे वास्तव में एक अजीब समस्या है कि मैं आज लगभग 4 घंटों तक Google और याहू में समाधान ढूंढ रहा हूं। और मैं सख्त समाधान की तलाश में हूं।javax.xml.ws.WebServiceException: अपरिभाषित बंदरगाह प्रकार जावा स्ट्रूट्स 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); 
    } 

ऊपर कोड सोप सेवा तक पहुँचने के लिए अपने ग्राहक है, यह वास्तव में एक स्टैंडअलोन जावा आवेदन में काम करता है, लेकिन जब मैं इसे अपने जावा Struts आवेदन करने के लिए एम्बेड इसके नीचे

javax निम्न त्रुटि का कहना है .xml.ws.WebServiceException: अपरिभाषित पोर्ट प्रकार: {http://bankcard.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)परपर 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) पर संगठन पर पर। 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) org.apache.struts.action.ActionServlet.doPost (ActionServlet.java:462) javax.servlet.http.HttpServlet.service पर पर (HttpServlet। जावा: 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 पर 0c351641061745151505369 पर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 (थ्रेड।जावा: 662)

अब मैं वास्तव में लगता है कि समस्या लक्ष्य नाम स्थान है, क्योंकि जैसा कि मैंने यह त्रुटि परिवर्तन बदलने कि करने के लिए यह कहना है कि वैध सेवाओं {http://bankcard.api.com/}BankCard

जहाँ मैं गलत हो गया है? यह कोड जावा एप्लिकेशन पर स्टैंडअलोन पर काम करता है लेकिन मेरे जावा स्ट्रैट्स वेब ऐप में नहीं,

उत्तर

5

कार्यान्वयन कक्षा में @WebService एनोटेशन में एंडपॉइंट इंटेरफेस दें, यदि आप एंडपॉइंट इंटरफ़ेस नहीं देते हैं, तो आपको getPort विधि का उपयोग करते समय पूरी तरह से योग्य पोर्ट नाम का उल्लेख करना होगा ।

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

+1

साथ, मेरे लिए काम किया धन्यवाद। @WebService (endpointInterface = "com.website.test.CalWebservice") – BustedSanta

+0

@anil कुमार, क्या आप कृपया एक उदाहरण दिखा सकते हैं कि पूरी तरह से योग्य पोर्ट नाम का उल्लेख कैसे करें? – Alexandr

1

आप @WebService(name="BankCard")
साथ BankCardImpl वर्ग पर टिप्पणी करने की जरूरत है तो आप service.getPort(BankCard.class);

या

उपयोग कर सकते हैं तो आप सिर्फ @WebService साथ उस पर टिप्पणी करें या यह एक और नाम दे दिया है, तो आप की आवश्यकता होगी getPort() विधि के लिए अधिक जानकारी प्रदान करें:

को प्रतिस्थापित करें 210
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);