2

私は Maven の初心者ですが、SOAP サービスと Axis2 をしばらく使用しています。前述のように、axis2-wsdl2code-maven-plugin を使用してサードパーティの wsdl からコードを生成しようとしています。コード生成は、ほとんどの部分で機能しています。生成されたソースで期待されるクラスが生成されていることがわかり、プロジェクトでクラスを参照できます。

私が抱えている問題は、セキュリティ ポリシーに関するものです。コードを生成した後にプロジェクトを実行しようとすると、次のエラーが表示されます。

org.apache.neethi.builders.converters.ConverterException: com.ctc.wstx.exc.WstxParsingException: Undeclared namespace prefix "t"

生成された ClientStub コードを確認したところ、次のポリシーが参照されていることがわかりました。

<wsp:Policy wsu:Id="FedAuthSyncPolicy"
    xmlns:wsp="http://www.w3.org/ns/ws-policy"
    xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
    <wsp:ExactlyOne>
        <wsp:All>
            <sp:TransportBinding
                xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
                <wsp:Policy
                    xmlns:wsp="http://www.w3.org/ns/ws-policy">
                    <sp:TransportToken>
                        <wsp:Policy
                            xmlns:wsp="http://www.w3.org/ns/ws-policy">
                            <sp:HttpsToken/>
                        </wsp:Policy>
                    </sp:TransportToken>
                    <sp:AlgorithmSuite>
                        <wsp:Policy
                            xmlns:wsp="http://www.w3.org/ns/ws-policy">
                            <sp:Basic256/>
                        </wsp:Policy>
                    </sp:AlgorithmSuite>
                    <sp:Layout>
                        <wsp:Policy
                            xmlns:wsp="http://www.w3.org/ns/ws-policy">
                            <sp:Lax/>
                        </wsp:Policy>
                    </sp:Layout>
                </wsp:Policy>
            </sp:TransportBinding>
            <sp:SignedSupportingTokens
                xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
                <wsp:Policy
                    xmlns:wsp="http://www.w3.org/ns/ws-policy">
                    <sp:IssuedToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
                        <sp:RequestSecurityTokenTemplate>
                            <t:TokenType>http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV2.0</t:TokenType>
                            <t:KeyType>http://docs.oasis-open.org/ws-sx/ws-trust/200512/Bearer</t:KeyType>
                            <t:CanonicalizationAlgorithm>http://www.w3.org/2001/10/xml-exc-c14n#</t:CanonicalizationAlgorithm>
                            <t:SignWith>http://www.w3.org/2000/09/xmldsig#hmac-sha1</t:SignWith>
                            <t:SignatureAlgorithm>http://www.w3.org/2000/09/xmldsig#rsa-sha1</t:SignatureAlgorithm>
                        </sp:RequestSecurityTokenTemplate>
                        <wsp:Policy>
                            <sp:RequireInternalReference/>
                        </wsp:Policy>
                        <sp:Issuer>
                            <wsaw:Address/>
                            <wsaw:Metadata>
                                <wsx:Metadata>
                                    <wsx:MetadataSection>
                                        <wsx:MetadataReference>
                                            <wsaw:Address/>
                                        </wsx:MetadataReference>
                                    </wsx:MetadataSection>
                                </wsx:Metadata>
                            </wsaw:Metadata>
                        </sp:Issuer>
                    </sp:IssuedToken>
                </wsp:Policy>
            </sp:SignedSupportingTokens>
            <sp:Wss11
                xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
                <wsp:Policy
                    xmlns:wsp="http://www.w3.org/ns/ws-policy"/>
                </sp:Wss11>
                <sp:Trust13
                    xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
                    <wsp:Policy
                        xmlns:wsp="http://www.w3.org/ns/ws-policy">
                        <sp:MustSupportIssuedTokens/>
                    </wsp:Policy>
                </sp:Trust13>
            </wsp:All>
        </wsp:ExactlyOne>
    </wsp:Policy>

名前空間「t」で始まるノードに注意してください。以前に同じ Web サービスで行ったプロジェクトを確認すると、コードは Maven ではなく、IntelliJ を介して Axis2 から生成されました。スタブは、次のポリシーで生成されました。

<wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="SyncPolicy">
   <wsp:ExactlyOne>
      <wsp:All>
         <sp:TransportBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
            <wsp:Policy>
               <wsp:ExactlyOne>
                  <wsp:All>
                     <sp:TransportToken>
                        <wsp:Policy>
                           <wsp:ExactlyOne>
                              <sp:HttpsToken />
                           </wsp:ExactlyOne>
                        </wsp:Policy>
                     </sp:TransportToken>
                     <sp:AlgorithmSuite>
                        <wsp:Policy>
                           <sp:Basic256 />
                        </wsp:Policy>
                     </sp:AlgorithmSuite>
                     <sp:Layout>
                        <wsp:Policy>
                           <wsp:ExactlyOne>
                              <sp:Lax />
                           </wsp:ExactlyOne>
                        </wsp:Policy>
                     </sp:Layout>
                  </wsp:All>
               </wsp:ExactlyOne>
            </wsp:Policy>
         </sp:TransportBinding>
         <sp:SignedSupportingTokens xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
            <wsp:Policy>
               <wsp:ExactlyOne>
                  <sp:UsernameToken>
                     <wsp:Policy>
                        <wsp:ExactlyOne>
                           <sp:WssUsernameToken10 />
                        </wsp:ExactlyOne>
                     </wsp:Policy>
                  </sp:UsernameToken>
               </wsp:ExactlyOne>
            </wsp:Policy>
         </sp:SignedSupportingTokens>
      </wsp:All>
      <wsp:All>
         <sp:TransportBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
            <wsp:Policy>
               <wsp:ExactlyOne>
                  <wsp:All>
                     <sp:TransportToken>
                        <wsp:Policy>
                           <wsp:ExactlyOne>
                              <sp:HttpsToken />
                           </wsp:ExactlyOne>
                        </wsp:Policy>
                     </sp:TransportToken>
                     <sp:AlgorithmSuite>
                        <wsp:Policy>
                           <sp:Basic256 />
                        </wsp:Policy>
                     </sp:AlgorithmSuite>
                     <sp:Layout>
                        <wsp:Policy>
                           <wsp:ExactlyOne>
                              <sp:Lax />
                           </wsp:ExactlyOne>
                        </wsp:Policy>
                     </sp:Layout>
                  </wsp:All>
               </wsp:ExactlyOne>
            </wsp:Policy>
         </sp:TransportBinding>
         <sp:SupportingTokens xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
            <wsp:Policy>
               <wsp:ExactlyOne>
                  <sp:UsernameToken>
                     <wsp:Policy>
                        <wsp:ExactlyOne>
                           <sp:WssUsernameToken10 />
                        </wsp:ExactlyOne>
                     </wsp:Policy>
                  </sp:UsernameToken>
               </wsp:ExactlyOne>
            </wsp:Policy>
         </sp:SupportingTokens>
      </wsp:All>
   </wsp:ExactlyOne>
</wsp:Policy>

このポリシーは、この Web サービスに必要なユーザー名トークンを参照します。Maven Axis2 WSDL2Code プラグインで、Issued Token ポリシーの代わりに Username Token ポリシーを使用するにはどうすればよいですか?

4

1 に答える 1

0

これとまったく同じ問題がありました。おそらく、同じ Web サービスを使用しています。私の解決策は、生成された ...Stub.java ファイルの "t:" が発生した場所で、古いバージョンの WSDL を使用していた場合にファイルに含まれていたはずの行を変更することでした。

于 2016-08-16T23:02:33.280 に答える