2012-11-16 27 views
5

ok Tôi có thực sự là một vấn đề lạ mà tôi tiếp tục tìm kiếm giải pháp trong google và yahoo trong gần 4 giờ ngày hôm nay. Và tôi tuyệt vọng tìm kiếm một giải pháp.javax.xml.ws.WebServiceException: Không xác định loại cổng 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); 
    } 

mã trên là khách hàng của tôi để truy cập vào các dịch vụ SOAP, nó thực sự làm việc trong một ứng dụng độc lập java nhưng khi tôi nhúng nó vào ứng dụng Java Struts của tôi nó nói lỗi sau đây

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

Bây giờ tôi thực sự thấy rằng vấn đề là không gian tên mục tiêu bởi vì khi tôi thay đổi nó thay đổi lỗi cho rằng nó nói rằng các dịch vụ có giá trị là {http://bankcard.api.com/}BankCard

nơi tôi đã đi sai? mã này hoạt động độc lập trên ứng dụng Java nhưng không phải trong ứng dụng web Java Struts của tôi

Trả lời

5

cho endpointIneterface trong chú thích @WebService trong lớp triển khai, nếu bạn không cung cấp giao diện điểm cuối, bạn phải đề cập đến tên cổng đầy đủ khi sử dụng phương thức getPort .

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

+1

Làm việc cho tôi, cảm ơn. @WebService (endpointInterface = "com.website.test.CalWebservice") – BustedSanta

+0

@anil kumar, bạn có thể vui lòng hiển thị ví dụ về cách đề cập đến tên cổng đủ điều kiện không? – Alexandr

1

Bạn cần phải chú thích các lớp BankCardImpl với @WebService(name="BankCard")
Sau đó bạn có thể sử dụng service.getPort(BankCard.class);

HOẶC

Nếu bạn chỉ chú thích nó với @WebService hoặc đã đặt cho nó một cái tên khác, sau đó bạn sẽ cần phải cung cấp thêm thông tin cho phương pháp getPort():

thay thế

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

với

QName port_name = new QName("http://server.bcard.soap.com/","BankCardImplPort"); 
BankCard bankcard = service.getPort(port_name, BankCard.class); 
Các vấn đề liên quan