Web services apache CXF@策略未包含在WSDL中
我正在使用Jboss EAP 7编写一个代码优先的web服务,需要为用户名令牌验证实现WS-Security。。。为此,我使用ApacheCXF策略,我设法使所有内容都在契约优先的透视图上工作,现在我唯一需要使其作为代码优先的透视图工作的是将策略包含到生成的wsdl中。。。为此,我使用了@org.apache.cxf.annotations.Policy,但该策略的代码片段没有添加到Jboss最终生成的wsdl中 这是我的密码:Web services apache CXF@策略未包含在WSDL中,web-services,jboss,wsdl,cxf,jboss-eap-7,Web Services,Jboss,Wsdl,Cxf,Jboss Eap 7,我正在使用Jboss EAP 7编写一个代码优先的web服务,需要为用户名令牌验证实现WS-Security。。。为此,我使用ApacheCXF策略,我设法使所有内容都在契约优先的透视图上工作,现在我唯一需要使其作为代码优先的透视图工作的是将策略包含到生成的wsdl中。。。为此,我使用了@org.apache.cxf.annotations.Policy,但该策略的代码片段没有添加到Jboss最终生成的wsdl中 这是我的密码: ... @WebService(serviceName =
...
@WebService(serviceName = "ExampleService", portName = "ExampleService",
endpointInterface = "com.company.webservice.ExampleService",
targetNamespace = "https://service.company.com/company-ws/ExampleService")
@EndpointConfig(configFile = "WEB-INF/jaxws-endpoint-config.xml",
configName = "Custom WS-Security Endpoint")
@Policy(uri = "WEB-INF/company-username-token-policy.xml")
public class ExampleServiceImpl implements ExampleService { ...
以下是WEB-INF/company-username-token-policy.xml
<?xml version="1.0" encoding="UTF-8" ?>
<wsp:Policy wsu:Id="UsernameTokenPolicy" 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:SupportingTokens
xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
<wsp:Policy>
<sp:UsernameToken
sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
<wsp:Policy>
<sp:WssUsernameToken11 />
</wsp:Policy>
</sp:UsernameToken>
</wsp:Policy>
</sp:SupportingTokens>
</wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>
我的jboss-deployment-structure.xml已经有以下条目:
<module name="org.apache.ws.security" export="true" />
<module name="org.apache.cxf" export="true" />
<module name="org.apache.cxf.impl" export="true" />
我在这里遗漏了什么?解决了问题 首先:您需要将策略xml文件放入resources文件夹,而不是WEB-INF 第二:您需要将
placement=Policy.placement.BINDING
添加到@Policy注释中
@Policy(uri = "company-username-token-policy.xml", placement = Policy.Placement.BINDING)
解决了问题 首先:您需要将策略xml文件放入resources文件夹,而不是WEB-INF 第二:您需要将
placement=Policy.placement.BINDING
添加到@Policy注释中
@Policy(uri = "company-username-token-policy.xml", placement = Policy.Placement.BINDING)
注意,在out设置中,对于某些绑定,@Policy会被默默忽略,例如Placement.SERVICE工作,以及绑定。但任何传入绑定在运行时都不会应用策略;这会导致服务在不处理/验证WS-sec标头部分的情况下使用请求。注意,在out设置中,对于某些绑定,@Policy会被静默忽略,例如Placement.service已工作以及绑定。但任何传入绑定在运行时都不会应用策略;这会导致服务在不处理/验证WS-sec标头部分的情况下使用请求