1

xmlbeans に基づいて wsdl-client-stub を作成しました。xmlbeans スタブに必要なクラス (?) がないため、xmlbeans を使用して認証用のカスタム ヘッダーを追加するのに行き詰まりました。

実際には、ヘッダーは次のようになります。

<SOAP-ENV:Header> 
        <ns2:verifyingToken> 
            <UserID>9</UserID>
            <Token>29438094lkjslfkjlsdkjf</Token>
        </ns2:verifyingToken>
     </SOAP-ENV:Header>

だから私はスタブとServiceClientの間に入るフォールバックとして試しました:

ServiceClient sc = stub._getServiceClient();

OMFactory  omFactory     = OMAbstractFactory.getOMFactory();
        OMElement  omElement     = omFactory.createOMElement(new QName("SOAP-ENV", "Header", "ver"), null);
        OMElement  omElementVeri = omFactory.createOMElement(new QName("", "verifyingToken", ""), omElement);
        OMElement  omElementUser = omFactory.createOMElement(new QName("", "UserID", ""), omElementVeri);
                   omElementUser.setText(""+userid);

        OMElement  omElementPass   =   omFactory.createOMElement(new QName("", "Token", ""), omElementVeri);
                   omElementPass.setText(""+token);
        sc.addHeader(omElement);

Eclipse で次のようなエラーが発生します: タイプ OMFactory のメソッド createOMElement(String, OMNamespace) は、引数 (QName, null) には適用できません - コンストラクター QName(String, String, String) は未定義です

これを機能させるために、何を修正する必要があるか、誰かがヒントを持っていますか。私は本当にあなたの助けに感謝します,

アレックス

4

1 に答える 1

6
ServiceClient client = stub._getServiceClient();
SOAP11Factory factory = new SOAP11Factory();
OMNamespace SecurityElementNamespace = factory.createOMNamespace("http://schemas.xmlsoap.org/ws/2002/12/secext", "wss");
OMElement usernameTokenEl = factory.createOMElement("UsernameToken", SecurityElementNamespace);

OMElement usernameEl = factory.createOMElement("Username", SecurityElementNamespace);
usernameEl.setText("123");
usernameTokenEl.addChild(usernameEl);

OMElement passwordEl = factory.createOMElement("Password", SecurityElementNamespace);
passwordEl.setText("123");
usernameTokenEl.addChild(passwordEl);

SOAPHeaderBlockImpl block = new SOAP11HeaderBlockImpl("Security", SecurityElementNamespace, factory);
block.addChild(usernameTokenEl);

client.addHeader(block);
于 2012-11-30T04:09:30.413 に答える