わかりました。今日、Google と Yahoo で解決策をほぼ 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: 未定義のポート タイプ: {http://bankcard.api.com/}BankCard at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:349) at com .sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:355) at javax.xml.ws.Service.getPort(Service.java:161) at 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) at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51) at org.apache.commons.chain.impl.ChainBase.execute( ChainBase.java:191) org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:305) at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191) at 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.java:637) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) org.apache.catalina.core.ApplicationFilterChain.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) apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) at org.apache.tomcat.util.net.JIoEndpoint$ Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Thread.java:662)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.coyote.http11 .Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) で org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) で java.lang.Thread.run(Thread.java:662) )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.coyote.http11 .Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) で org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) で java.lang.Thread.run(Thread.java:662) )StandardEngineValve.invoke(StandardEngineValve.java:109) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) at org .apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JioEndpoint.java:489) at java.lang.Thread.run (Thread.java:662)StandardEngineValve.invoke(StandardEngineValve.java:109) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) at org .apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JioEndpoint.java:489) at java.lang.Thread.run (Thread.java:662)489) java.lang.Thread.run(Thread.java:662) で489) java.lang.Thread.run(Thread.java:662) で
問題はターゲット名前空間にあることがわかりました。これを変更すると、有効なサービスが{http://bankcard.api.com/}BankCard
私はどこで間違ったのですか?このコードは、Java アプリケーションのスタンドアロンでは機能しますが、私の Java Struts Web アプリでは機能しません