2017-12-13 20 views
0

私が作成した小さなクライアントからSOAPサービスを呼び出そうとしています。私はmavenを使ってwsdl型を解析して作成します。WSDLからクライアントを作成できません

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>jaxws-maven-plugin</artifactId> 
    <version>1.12</version> 
    <configuration> 
     <wsdlDirectory>${basedir}/src/main/resources/META-INF/wsdl</wsdlDirectory> 
     <wsdlLocation>http://localhost/wsdl/sample.wsdl</wsdlLocation> 
     <packageName>com.sample</packageName> 
     <keep>true</keep> 
     <sourceDestDir>${basedir}/target/generated-sources/</sourceDestDir> 
    </configuration> 
    <executions> 
     <execution> 
      <goals> 
       <goal>wsimport</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

私が与えられているWSDLコントラクトは、これらの「ハードコードされたエンドポイント」の詳細を持っています

... 
<wsdl:types> 
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
     targetNamespace="http://sample.com/sample/1.0"> 
     <xsd:include 
      schemaLocation="http://10.10.10.10:80/samplews/wsdl/eventmessagesws.xsd" /> 
     <xsd:include 
      schemaLocation="http://10.10.10.10:80/samplews/wsdl/samplews.xsd" /> 
    </xsd:schema> 
</wsdl:types> 
... 

<wsdl:port name="samplePort" binding="tns:sampleServiceSOAP"> 
    <soap:address location="http://10.10.10.10:80/samplews" /> 
</wsdl:port> 

私はもともと気づいたことは要素のデフォルトの場所はへの呼び出しを行うために使用されていることですあらかじめ定義されたターゲット。しかし、この動作は私のアプリケーションでは望ましくありませんでした。代わりに、私はそれを動的に調整したいと思います。したがって、研究はこの投稿に私を導いた:overriding or setting web service endpoint at runtime for code generated with wsimport 。私は次のコードで、デフォルトのバインディングを上書きすることを考えると

は、右のターゲット・システムが呼び出されます:

final String endpoint = "http://20.20.20.10:80/samplews"; 
final SampleService service = new SampleService(); 
final SamplePortType samplePort = service.getSamplePort(); 

final BindingProvider provider = (BindingProvider) samplePort; 
provier.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpoint); 
samplePort.doSomething(); 

はこれを行う、私は問題を解決するために管理しました。つまり、小さなクライアントを呼び出すと、適切なターゲットがメッセージを取得します。

しかし、今注目している問題は、ホスト10.10.10.10:80がダウンし、20.20.20.10:80へのオーバーライドされたバインドが残っている場合、クライアントで接続例外が発生するということです。エラー状態以下:

Caused by: javax.wsdl.WSDLException: WSDLException (at /wsdl:definitions/wsdl:types/xsd:schema): faultCode=PARSER_ERROR: Problem parsing 'http://10.10.10.10:80/samplews/wsdl/eventmessagesws.xsd'.: java.net.ConnectException: Connection refused: connect 

私はその中で、私は次のエラーを取得したい、達人と私のクライアントを再コンパイルしようとすると、同じことが当てはまります。私は

parsing WSDL... 
[ERROR] Connection timed out: connect 

をしないのですがデフォルト値が「決して使用されていない」ことを確実にする何か、動的値は常に? (Mavenと私の小さなクライアントの両方において)

+0

リモートスキーマのローカルコピーを作成し、10.10.10.10:80 /の代わりに使用することはできません。 – nayakam

+0

@nayakam私は正直には分かりません。あなたはスキーマを編集し、すべての静的IPをlocalhostに置き換えると言っていますか?しかし、実行中のMavenは失敗する可能性があります。 – angryip

答えて

1

Caused by: javax.wsdl.WSDLException: WSDLException (at /wsdl:definitions/wsdl:types/xsd:schema): faultCode=PARSER_ERROR: Problem parsing ' http://10.10.10.10:80/samplews/wsdl/eventmessagesws.xsd '.: java.net.ConnectException: Connection refused: connect

は、動的エンドポイントをリセットするための要求をリダイレクトする事前定義されたリモートホストのように見える、私のコメントを詳しく説明します。 eventmessagesws.xsdとsamplews.xsdのローカルコピーをhttp://10.10.10.10:80から作成し、リソースディレクトリに配置することができます。 __schemaLocationをローカルコピーを指すように更新します。

<wsdl:types> 
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
     targetNamespace="http://sample.com/sample/1.0"> 
     <xsd:include 
      schemaLocation="src/main/resources/samplews/wsdl/eventmessagesws.xsd" /> 
     <xsd:include 
      schemaLocation="src/main/resources/samplews/wsdl/samplews.xsd" /> 
    </xsd:schema> 
</wsdl:types> 
+0

これは機能するかもしれません。私はそれを行ってあげるよ。 – angryip

+0

私はスキーマのダウンロードを終了し、それらをwsdlに関連して配置し、魅力的に働いた。良いキャッチ! – angryip

+0

@angryipそれはあなたのために働いてうれしい。 – nayakam

関連する問題