質問

Netbeans から gSoap で生成された wsdl を使用しようとしています。Web サービスでは、UserNameToken を渡す必要があります。SoapUI から wsdl を使用すると (これは機能します)、これが送信されます。

<wsse:Username>myname</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">mypass</wsse:Password>

ただし、ハンドラー(で参照)を使用してNetbeansから試してみると、 Java JAX-WSを使用してSOAPヘッダーを追加するにはどうすればよいですか) このような:

            String prefix = "wsse";
            String uri = "http://...wsssecurity...";

            SOAPElement securityElem = factory.createElement("Security",prefix,uri);

                SOAPElement UserNametokenElem = factory.createElement("UserNameToken",prefix,uri);

                    SOAPElement UsernameElem = factory.createElement("wsse:Username");
                    UsernameElem.addTextNode("myname");
                    SOAPElement PasswordElem = factory.createElement("Password");
                    PasswordElem.addTextNode("mypass");

                    UserNametokenElem.addChildElement(UsernameElem);
                    UserNametokenElem.addChildElement(PasswordElem);

                    securityElem.addChildElement(UserNametokenElem);
            SOAPHeader header = envelope.addHeader();
            header.addChildElement(securityElem);

次のような SOAP ヘッダーが生成されます。

    <wsse:Security xmlns:wsse="http://...wsssecurity...">
    <wsse:UserNameToken xmlns:wsse="http://...wsssecurity...">
    <Username xmlns="">myname</Username>
    <Password xmlns="">mypass</Password>
    </wsse:UserNameToken>
    </wsse:Security>

これにより、Web サービスは認証エラーで応答します。

したがって、私の質問は次のとおりです。

  1. UserNameToken を正しい方法 (SoapUi のように) で生成するにはどうすればよいですか?
  2. ハンドラーを使用して実行する方が良いですか、それとも Apache WSS4J のような外部 WSSE ライブラリを使用して実行する方が良いですか (誰かがこれのサンプル コードを見せてくれませんか)
役に立ちましたか?

解決

I最終的に正常に使用WSS4J、このような何かをした。

            SOAPPart soappart = message.getSOAPPart();
            SOAPEnvelope envelope = soappart.getEnvelope();
            SOAPHeader header = envelope.getHeader();
            WSSecHeader wsheader = new WSSecHeader();
            wsheader.insertSecurityHeader(soappart);
            WSSecUsernameToken token = new WSSecUsernameToken();
            token.setPasswordType(WSConstants.PASSWORD_DIGEST);
            token.setUserInfo("myuser", "mypass");
            token.build(soappart, wsheader);

WSS4Jはように気をつけ、いくつかのネストされた依存関係を持っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top