【问题标题】:apache CXF @Policy not including in WSDLapache CXF @Policy 不包括在 WSDL 中
【发布时间】:2017-06-22 09:25:17
【问题描述】:

我正在使用 Jboss EAP 7 编写代码优先的 Web 服务,并且需要实现 WS-Security 以进行用户名令牌验证...为此,我使用 Apache CXF 策略,我设法使所有工作都在合同上运行-第一视角,现在我唯一需要让它作为代码优先视角工作的是将策略包含到生成的wsdl中......为此,我正在使用@org.apache.cxf.annotations.Policy但是策略的代码 sn-p 没有添加到 Jboss 最终生成的 wsdl 中。

这是我的代码:

...
    @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" />

我在这里错过了什么?

【问题讨论】:

    标签: web-services jboss wsdl cxf jboss-eap-7


    【解决方案1】:

    找出问题所在......

    首先:您需要将策略xml文件放入资源文件夹而不是WEB-INF。

    第二:您需要将placement = Policy.Placement.BINDING 添加到您的@Policy 注释中...

    @Policy(uri = "company-username-token-policy.xml", placement = Policy.Placement.BINDING)
    

    【讨论】:

      【解决方案2】:

      注意,在设置中,@Policy 会被某些绑定静默忽略,例如Placement.SERVICE 有效,BINDING 也有效。但任何 _INCOMING 绑定都不会在运行时应用策略;这会导致服务在不处理/验证 WS sec 标头部分的情况下使用请求

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多