私はSOAP Webサービスに非常に慣れていません。いくつか知りたいことがあります。WSDL で言及されている「soap:address location」として新しい IP アドレス (たとえば B) を見つけましたが、この URL は A とはまったく異なります。私の質問は、なぜ B アドレスが必要なのかということです。これは常駐するマシンの内部 IP アドレスですか? A の背後にあり、クライアントからは完全にアクセスできません。流れは?
A は公開されていないため、ホストは WAN IP にアクセス許可を与えて、A にアクセスできるようにしました。これで、単純な Java コードから A の URL (WSDL コンテンツを取得) にアクセスできます。
URL オラクル = 新しい URL(A);
URLConnection yc = oracle.openConnection(proxy);
私はプロキシファイアウォールの背後にいるので。しかし、私は
URLConnection yc = oracle.openConnection();
このことから、Java はデフォルトで、マシンのデフォルトのプロキシ設定をバイパスして任意の URL に接続しようとしていると結論付けることができますか?
WSDL URL からクライアント スタブを生成したところ、A の注釈が付けられていることがわかりました。
@WebServiceClient(name = "BDCDataExchange"、targetNamespace = "何らかの URL"、wsdlLocation = "A"
しかし、私がコードを実行しているとき、それは与えています
com.sun.xml.internal.ws.client.ClientTransportException: HTTP transport error: java.net.ConnectException: Connection timed out: connect
at com.sun.xml.internal.ws.transport.http.client.HttpClientTransport.getOutput(Unknown Source)
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(Unknown Source)
単純な Java コードから A にアクセスできるので、この例外は、内部の soap:address B にアクセスできないことを意味しますか?
しかし、次のようなローカル WSDL パスを使用してクライアントを生成すると、同じクライアント コードが機能します。
wsimport A //not working while executing, above exception comes
wsimport <a local path where I saved the WSDL file> //it works when I run