SSL で保護された WebService を Apache CXF v2.7.3 で実装しているときに、カスタム例外クラス (MyException など) がクライアントによってどのように処理されるかをテストしたいと思いました。
したがって、次のサーバー側の方法があります。
@WebMethod
public void foo() throws MyException {
throw new MyException("test!");
}
また、次の方法で cxf.xml にログインおよび発信メッセージを設定しました。
<bean id="logInbound" class="org.apache.cxf.interceptor.LoggingInInterceptor"/>
<bean id="logOutbound" class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
<jaxws:inInterceptors>
<ref bean="logInbound"/>
</jaxws:inInterceptors>
<jaxws:outInterceptors>
<ref bean="logOutbound"/>
</jaxws:outInterceptors>
クライアントでこの関数を呼び出すと、次のコンソール出力が得られます
INFO: Inbound Message
----------------------------
ID: 1
Address: https://localhost:8443/WebApp/services/ClientService
Encoding: UTF-8
Http-Method: POST
Content-Type: text/xml; charset=UTF-8
Headers: {Accept=[*/*], cache-control=[no-cache], connection=[keep-alive], Content-Length=[184], content-type=[text/xml; charset=UTF-8], host=[localhost:8443], pragma=[no-cache], SOAPAction=[""], user-agent=[Apache CXF 2.7.3]}
Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns2:foo xmlns:ns2="http://services.client.test.cloud.org/"/></soap:Body></soap:Envelope>
--------------------------------------
18.02.2013 22:49:02 org.apache.cxf.phase.PhaseInterceptorChain doDefaultLogging
INFO: Application {http://services.client.test.cloud.org/}ClientService#{http://services.client.test.cloud.org/}foo has thrown exception, unwinding now: org.cloud.test.client.exception.MyException: test!
18.02.2013 22:49:02 org.apache.cxf.phase.PhaseInterceptorChain doDefaultLogging
INFO: Application {http://services.client.test.cloud.org/}ClientService#{http://services.client.test.cloud.org/}foo has thrown exception, unwinding now: java.lang.NullPointerException: null
クライアントは「XMLStreamReader の読み取りエラー」を受け取ります。「予期しないEOF」が原因です。サーバーによって応答が書き込まれないと思います。2 つの例外がスローされる理由と、クライアントへの応答がない理由を知っていますか? Apache CXF アプリケーションでクライアントにリダイレクトされない例外を既に検索しましたが、解決策が見つかりませんでした。
前もって感謝します!