Hello,

I am using CXF 2.2.2 and I am trying to implement a policy that requires
transport-level security for securing messages. I followed the intructions
for enabling and configuring the policy engine (
http://cwiki.apache.org/CXF20DOC/wspconfiguration.html). The contents of my
cxf.xml is included below along with my policy expression, which is
contained in a separate file called policies.xml. When I ran my code I got
an error shown in the stacktrace below. I did some searching online and
found a currently open bug describing the same problem (
https://issues.apache.org/jira/browse/CXF-1318?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
).

I tried the workaround given in the bug and it got rid of the
NullPointerException, however, the policy now isn't being enforced. Does
anyone have any ideas on how I can have CXF enforce transport-level
security?

Thanks.



cxf.xml
======
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans";
       xmlns:p="http://cxf.apache.org/policy";
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
       xmlns:http-conf="http://cxf.apache.org/transports/http/configuration";

    xmlns:cxf="http://cxf.apache.org/core";
    xmlns:xs="http://www.w3.org/2001/XMLSchema";
       xsi:schemaLocation="
http://cxf.apache.org/transports/http/configuration
           http://cxf.apache.org/schemas/configuration/http-conf.xsd
           http://cxf.apache.org/policy
http://cxf.apache.org/schemas/policy.xsd
           http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd";>
 <!-- This causes NPE in PolicyEngineImpl -->
 <!--
    <p:engine enabled="true" ignoreUnknownAssertions="false"/>
    <p:externalAttachment location="classpath:/policies.xml"/>
 -->
    <bean
class="org.apache.cxf.ws.policy.attachment.external.ExternalAttachmentProvider">
        <constructor-arg ref="cxf"/>
        <property name="location" value="classpath:/policies.xml"/>
    </bean>
    <bean id="org.apache.cxf.ws.policy.PolicyEngine"
class="org.apache.cxf.ws.policy.spring.InitializingPolicyEngine">
        <property name="bus" ref="cxf"/>
        <property name="enabled" value="true"/>
    </bean>
</beans>



policies.xml
=========
<?xml version="1.0" encoding="UTF-8" ?>
<attachments xmlns:wsp="http://www.w3.org/ns/ws-policy";
    xmlns:wsa="http://www.w3.org/2005/08/addressing";
 xmlns:xs="http://www.w3.org/2001/XMLSchema";
    xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702";>
    <wsp:PolicyAttachment>
        <wsp:AppliesTo>
            <wsa:EndpointReference>
                <wsa:Address>xs:anyURI</wsa:Address>
            </wsa:EndpointReference>
        </wsp:AppliesTo>
        <wsp:Policy>
            <sp:TransportBinding>
                <wsp:Policy>
                    <sp:TransportToken>
                        <wsp:Policy>
                            <sp:HttpsToken>
                                <wsp:Policy/>
                            </sp:HttpsToken>
                        </wsp:Policy>
                    </sp:TransportToken>
                </wsp:Policy>
            </sp:TransportBinding>
        </wsp:Policy>
    </wsp:PolicyAttachment>
</attachments>

Stacktrace
========

java.lang.NullPointerException
org.apache.cxf.ws.policy.PolicyEngineImpl.supportsAlternative(PolicyEngineImpl.java:499)
org.apache.cxf.ws.policy.EndpointPolicyImpl.getSupportedAlternatives(EndpointPolicyImpl.java:166)
org.apache.cxf.ws.policy.EndpointPolicyImpl.chooseAlternative(EndpointPolicyImpl.java:153)
org.apache.cxf.ws.policy.EndpointPolicyImpl.finalizeConfig(EndpointPolicyImpl.java:137)
org.apache.cxf.ws.policy.EndpointPolicyImpl.initialize(EndpointPolicyImpl.java:133)
org.apache.cxf.ws.policy.PolicyEngineImpl.createEndpointPolicyInfo(PolicyEngineImpl.java:482)
org.apache.cxf.ws.policy.PolicyEngineImpl.getEndpointPolicy(PolicyEngineImpl.java:229)
org.apache.cxf.ws.policy.PolicyEngineImpl.getServerEndpointPolicy(PolicyEngineImpl.java:217)
org.apache.cxf.transport.http.policy.PolicyUtils.getServer(PolicyUtils.java:180)
org.apache.cxf.transport.http.AbstractHTTPDestination.initConfig(AbstractHTTPDestination.java:398)
org.apache.cxf.transport.http.AbstractHTTPDestination.<init>(AbstractHTTPDestination.java:119)
org.apache.cxf.transport.servlet.ServletDestination.<init>(ServletDestination.java:66)
org.apache.cxf.transport.servlet.ServletTransportFactory.getDestination(ServletTransportFactory.java:102)
org.apache.cxf.endpoint.ServerImpl.initDestination(ServerImpl.java:90)
org.apache.cxf.endpoint.ServerImpl.<init>(ServerImpl.java:69)
org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:118)
org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBean.java:167)
org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:346)
org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:259)
org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:209)
org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:404)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1413)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1374)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1334)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
java.security.AccessController.doPrivileged(Native Method)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:221)
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:729)
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:381)
org.apache.cxf.transport.servlet.CXFServlet.loadAdditionalConfig(CXFServlet.java:166)
org.apache.cxf.transport.servlet.CXFServlet.updateContext(CXFServlet.java:134)
org.apache.cxf.transport.servlet.CXFServlet.loadSpringBus(CXFServlet.java:101)
org.apache.cxf.transport.servlet.CXFServlet.loadBus(CXFServlet.java:70)
org.apache.cxf.transport.servlet.AbstractCXFServlet.init(AbstractCXFServlet.java:79)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
java.lang.Thread.run(Thread.java:619)

Reply via email to