3

次の(関連する)元の依存関係(でpom.xml)を使用して、CXFベースのプロジェクトを継承しました。

<dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-frontend-jaxws</artifactId>
        <version>2.2.7</version>
</dependency>
<dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-transports-http</artifactId>
        <version>2.2.7</version>
</dependency>
<dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-ws-security</artifactId>
        <version>2.2.7</version>
</dependency>

<plugin>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-codegen-plugin</artifactId>
        <version>2.2.8-SNAPSHOT</version>

「元の」とは、これが私が受け取ったソースコードのスナップショットであり、何年も前に正常にビルドされていたものであり、ここ数年は休止しており、コードにいくつかの変更が必要なため、そのままではビルドされないことを意味します。

「現状のまま」ビルドしようとする際の主な問題は、の2.2.8-SNAPSHOTバージョンcxf-codegen-pluginどこにも見つからないことです... Mavenはそれを見つけることができず、ビルドに失敗します。

そこで、上記を次のように置き換えました(2.2.8と2.2.8-SNAPSHOTの違いのみに注意してください)

<plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <version>2.2.8</version>

ビルドはこの時点を過ぎても成功しますが、2つのシンボルが見つからない場合は失敗します。

  1. Password.set_value(String value)-パッケージからorg.oasis_open.docs.wss._2004._01.oasis_200401_wss_wssecurity_secext_1_0
  2. SQLService.setENDPOINT(String sei)に基づく独自のパッケージからjavax.xml.ws.Service

Passwordクラスの両方のソースファイルは、SQLServiceこのプロジェクトの元の作成者によって設計されたように、ApacheCXF2.2.8によってオンザフライで生成されます。

そこで、このファイルの新しく生成されたバージョンをすばやく調べて、次のことを発見しました。

  1. Password.set_value(String value)に置き換えられたようPassword.setValue(String value)です。
  2. SQLService.setENDPOINT(String sei)完全に削除され、代わりにseiをコンストラクターに渡す必要があります。SQLService(URL wsdlLocation, QName serviceName)

そこで、これらのメソッドを呼び出すソースコードを変更して、この2つの一見マイナーな変更に適応させ、プロジェクトが正常にビルドされるようになりました。

しかし...次の例外を除いて、実行時に失敗します。

WARNING: Interceptor for {http://rservice.rorg.net/sql}SQLService#{http://rservice.rorg.net/sql}Get has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: Could not send Message.
    at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:64)
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:243)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:487)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:313)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:265)
    at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)
    at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:124)
    at $Proxy38.get(Unknown Source)
        ...
Caused by: java.net.ConnectException: ConnectException invoking http://localhost:8080/rservice/services/SQLServiceSoap: Connection refused
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:67)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:522)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.mapException(HTTPConduit.java:2058)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:2043)
    at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:66)
    at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:639)
    at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
    ... 14 more
Caused by: java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:413)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:274)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:261)
    at java.net.Socket.connect(Socket.java:556)
    at sun.net.NetworkClient.doConnect(NetworkClient.java:175)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:403)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:521)
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:246)
    at sun.net.www.http.HttpClient.New(HttpClient.java:320)
    at sun.net.www.http.HttpClient.New(HttpClient.java:337)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:996)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:948)
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:873)
    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1040)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleHeadersTrustCaching(HTTPConduit.java:1955)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.onFirstWrite(HTTPConduit.java:1907)
    at org.apache.cxf.io.AbstractWrappedOutputStream.write(AbstractWrappedOutputStream.java:42)
    at org.apache.cxf.io.AbstractThresholdOutputStream.write(AbstractThresholdOutputStream.java:69)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1974)
    ... 17 more


04-Jan-2013 12:07:17 ERROR [SQLModule] Error running SQL module: Could not send Message.
javax.xml.ws.WebServiceException: Could not send Message.
    at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:135)
    at $Proxy38.get(Unknown Source)
    at net.rorg.rservice.client.base.sql.SQLClientBase.get(SQLClientBase.java:306)
    at net.rorg.rservice.client.module.sql.SQLModule.getBatch(SQLModule.java:149)
    at net.rorg.rservice.client.module.sql.SQLModule.getAndProcessSQL(SQLModule.java:110)
    at net.rorg.rservice.client.module.sql.SQLModule.run(SQLModule.java:280)
    at net.rorg.rservice.client.RClient.exec(RClient.java:398)
    at net.rorg.rservice.client.RClient.run(RClient.java:173)
    at net.rorg.rservice.client.RClient.main(RClient.java:166)
Caused by: 
java.net.ConnectException: ConnectException invoking http://localhost:8080/rservice/services/SQLServiceSoap: Connection refused
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:67)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:522)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.mapException(HTTPConduit.java:2058)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:2043)
    at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:66)
    at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:639)
    at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:243)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:487)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:313)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:265)
    at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)
    at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:124)
    ... 8 more
Caused by: 
java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:413)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:274)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:261)
    at java.net.Socket.connect(Socket.java:556)
    at sun.net.NetworkClient.doConnect(NetworkClient.java:175)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:403)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:521)
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:246)
    at sun.net.www.http.HttpClient.New(HttpClient.java:320)
    at sun.net.www.http.HttpClient.New(HttpClient.java:337)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:996)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:948)
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:873)
    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1040)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleHeadersTrustCaching(HTTPConduit.java:1955)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.onFirstWrite(HTTPConduit.java:1907)
    at org.apache.cxf.io.AbstractWrappedOutputStream.write(AbstractWrappedOutputStream.java:42)
    at org.apache.cxf.io.AbstractThresholdOutputStream.write(AbstractThresholdOutputStream.java:69)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1974)
    ... 17 more

注: WSDLに実際の(www)サーバーURLをハードコーディングした場合(つまり、に置き換えhttp://localhost:8080https://test.rserver.com場合)でも、宛先として表示されるConnectExceptionエラーが発生http://localhost:8080します。明らかに、一部のCXF置換または解決は実行されません。それは問題がどこにあるかへの手がかりになるでしょうか?CXFのどのコンポーネントがhttp://localhost:8080実際のURLへの魔法の変換を担当していますか?

スタックトレースのヒント(つまり、JaxWsClientProxyまたはfrontend.ClientProxyまたは...)は正しいですか?

at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:243)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:484)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:310)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:262)
at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:124)

もしそうなら、なぜこれが起こっているのですか、そしてどうすればこれを修正できますか?

さて...もし私がCXFやJAX-WSの専門家だったら、スタックトレースにある誤解を招くような「接続が拒否されました」というヒントの根本的な原因をおそらく理解していたでしょう。

しかし、この時点で私はかなり迷っています。SEIが存在することを確実に知っているので、認証のユーザー名/パスワードは正しいです。古いバイナリ(依存関係のあるJAR)は、このサービスに対して問題なく動作します。

したがって、このタイプの「接続が拒否された」スタックトレースを見て、一般的な理由以外の理由でトリガーされる可能性があることを知っている専門家からの手がかりまたは洞察を探しています。たとえば、2.2.8-SNAPSHOTが2.2.8に置き換えられた後に導入されたある種の不一致?cxf-codegen-plugin

または、この問題のトラブルシューティング方法に関する追加のヒントはありますか?

4

1 に答える 1

2

あなたの変更がSQLService問題になるかもしれないと思います

SQLService.setENDPOINT(String sei)は完全に削除され、代わりにseiをコンストラクターで渡す必要があります。SQLService(URL wsdlLocation、QName serviceName)

コンストラクター呼び出しに新しいURLを追加しましたか?以前は何でしseiたか?URLを入力した場合は、接続が失敗している可能性があります。引数なしのコンストラクターを使用できるはずです。

実行時にURLを設定したい場合(私はそれがsetENDPOINT呼び出しが行っていたと思います)、を操作する必要がありますBindingProvider。このスレッドを参照してくださいhttp://cxf.547215.n5.nabble.com/How-to-change-the-service-URL-at-runtime-td3242927.html

于 2013-01-07T16:04:55.220 に答える