我是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“为前缀的节点。回顾我之前用同样的webservice做的一个项目,代码是通过IntelliJ从Axis2生成的,而不是通过maven生成的。存根是使用以下策略生成的:
<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插件使用用户名令牌策略而不是已发布的令牌策略?
发布于 2016-08-17 07:02:33
我遇到了完全相同的问题,也许我们使用的是相同的web服务。我的解决方案涉及修改生成的...Stub.java文件,无论"t:“出现在哪里,如果您使用的是旧版本的WSDL,那么您的文件将包含的代码行。
https://stackoverflow.com/questions/35424647
复制相似问题