私はnadirsagharからのヒントについていくつかの調査を行い、それが利用可能なクリーンソリューションであることがわかりました. JAX-WS で message.getExchange() を使用するのは、コンジットをセットアップして自分で応答メッセージを入力する必要があるため、完全に苦痛です...
したがって、HttpServletResponse を使用して、この方法で実行することをお勧めします。- パスに Java servlet-api.jar が必要です。Maven を使用せずに開発している場合は、Web サーバー (Tomcat など) のディレクトリからリンクするだけで、デプロイメントからは除外します。
<!-- With Maven add the following dependency -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<!-- The version should match your WebService version e.g. 3.0 for JDK7-->
<version>2.5</version>
<scope>provided</scope>
</dependency>
スコープが提供されると、デプロイされずに利用できるため、HttpServletResponse クラスにアクセスできます。
ハンドラー コード:
@Override
public void handleMessage( final Message message ) throws Fault
{
if( shouldBlockMessage( message ) )
{
message.getInterceptorChain().abort();
final HttpServletResponse response = (HttpServletResponse)message.get( AbstractHTTPDestination.HTTP_RESPONSE );
// To redirect a user to a different Page
response.setStatus( HttpServletResponse.SC_MOVED_TEMPORARILY );
response.setHeader( "Location", "http://www.bla.blubb/redirectPage" );
// Other possibility if a User provides faulty login data
response.setStatus( HttpServletResponse.SC_FORBIDDEN );
}
}