これにより、基本 HTTP 認証のユーザー名とパスワードが設定されます。SoapUI でテストした場合、あなたが話している「PasswordText」の値は、リクエストの詳細ペインの「WSS-Password Type」であると推測しています。これは、HTTP セキュリティではなく、WSS セキュリティを設定します。
Java6 の JAX-WS では、SOAPHandler をアタッチして、WSS-Usertoken を SOAP ヘッダーに挿入する必要があります。これについてはネット上にたくさんの情報がありますが、投稿するリンクが 1 つも見つからなかったので、代わりにいくつかのコードを紹介します...
ハンドラーを追加するには、次のようなものが必要です。
final Binding binding = ((BindingProvider) servicePort).getBinding();
List<Handler> handlerList = binding.getHandlerChain();
if (handlerList == null)
handlerList = new ArrayList<Handler>();
handlerList.add(new SecurityHandler());
binding.setHandlerChain(handlerList); // <- important!
次に、SecurityHandler クラスがその行為を行います。ハンドラーは一般的なものであり、メッセージの成功とエラーの両方で呼び出されますが、おそらくもっと重要なのは、メッセージの両方の方向 (送信要求と受信応答) で呼び出されることです。送信メッセージのみを処理したい。したがって、次のようなものが必要になります。
public final class SecurityHandler implements SOAPHandler<SOAPMessageContext> {
...
@Override
public boolean handleMessage(final SOAPMessageContext msgCtx) {
// Indicator telling us which direction this message is going in
final Boolean outInd = (Boolean) msgCtx.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
// Handler must only add security headers to outbound messages
if (outInd.booleanValue()) {
try {
// Get the SOAP Envelope
final SOAPEnvelope envelope = msgCtx.getMessage().getSOAPPart().getEnvelope();
// Header may or may not exist yet
SOAPHeader header = envelope.getHeader();
if (header == null)
header = envelope.addHeader();
// Add WSS Usertoken Element Tree
final SOAPElement security = header.addChildElement("Security", "wsse",
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
final SOAPElement userToken = security.addChildElement("UsernameToken", "wsse");
userToken.addChildElement("Username", "wsse").addTextNode("MyWSSUsername");
userToken.addChildElement("Password", "wsse").addTextNode("MyWSSPassword");
} catch (final Exception e) {
LOG.error(e);
return false;
}
}
return true;
}
...
// Other required methods on interface need no guts
}
ここでいくつかの仮定を立てましたが、うまくいけば、うまくいくでしょう!
敬具。