簡體   English   中英

UsernameToken的SOAP wsdl規范

[英]Specification of SOAP wsdl for UsernameToken

我正在編寫一個使用WSDL優先方法連接到SOAP Web服務的客戶端。 為了實現,我使用的是Apache CXF版本3.1.4

測試時,出現以下異常:

12:35:15.492 [main] WARN oacwpawWsdl11AttachmentPolicyProvider - Failed to build the policy 'UsernameToken':sp:UsernameToken must have an inner wsp:Policy element Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: sp:UsernameToken must have an inner wsp:Policy element at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:160) at com.sun.proxy.$Proxy36.getPing(Unknown Source) ... Caused by: java.lang.IllegalArgumentException: sp:UsernameToken must have an inner wsp:Policy element at org.apache.wss4j.policy.builders.UsernameTokenBuilder.build(UsernameTokenBuilder.java:52) at org.apache.wss4j.policy.builders.UsernameTokenBuilder.build(UsernameTokenBuilder.java:34) at org.apache.neethi.AssertionBuilderFactoryImpl.invokeBuilder(AssertionBuilderFactoryImpl.java:138)

WSDL文件的相關部分如下所示:

<wsp:Policy wsu:Id="UsernameToken"> <wsp:ExactlyOne> <wsp:All> <sp:SupportingTokens> <wsp:Policy> <sp:UsernameToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient"/> </wsp:Policy> </sp:SupportingTokens> </wsp:All> </wsp:ExactlyOne> </wsp:Policy>

錯誤消息表明CXF需要在UsernameToken下使用策略標記。 確實,在研究過程中,我遇到了來自CXF Bug Tracker評論

Yes... Per spec, the <sp:UsernameToken> element MUST contain an internal wsp:Policy element. It should look like: <sp:UsernameToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient"> <wsp:Policy> <sp:WssUsernameToken11 /> </wsp:Policy> </sp:UsernameToken>

但是, 規范說

/sp:UsernameToken/wsp:Policy This optional element identifies additional requirements for use of the sp:UsernameToken assertion.

注意:可選。

那么是哪一個呢? 似乎CXf需要一個策略,而規范說它是可選的。 我還需要查看另一個規范嗎?

似乎在SO上這個問題還沒有引起人們的注意,但是在google帶領下有人在這里,我不妨發布解決方案。

我在Apache CXF用戶郵件列表中發布了相同的問題,並得到了答復:

這是我剛剛修復的WSS4J中的錯誤: https ://issues.apache.org/jira/browse/WSS-564

WS-SecurityPolicy 1.2 + 1.3需要一個策略元素,而1.1則不需要。 在下一個WSS4J版本之前,最好的選擇是保留一個空的Policy Element。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM