Hello everybody,

I have created a Web Service using Sun's Metro stack (i.e., JAX-WS + WSIT).  
For this, I also created a policy file that works well with the WSIT 
implementation of WS-Policy/WS-SecurityPolicy/...  Now, I would like to create 
a CXF-based Web Service + client for the same WSDL/Policy file.  The Policy 
looks more or less like this (I cut some parts to save space):

<?xml version="1.0" encoding="UTF-8"?>
<definitions targetNamespace="http://computernoma.de/AlgebraService";
                xmlns="http://schemas.xmlsoap.org/wsdl/";
                ...
                
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd";
                xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy";
                xmlns:sc="http://schemas.sun.com/2006/03/wss/client";
                xmlns:wspp="http://java.sun.com/xml/ns/wsit/policy";
                xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy";
                xmlns:wsaws="http://www.w3.org/2006/05/addressing/wsdl";
                xmlns:wsrm="http://schemas.xmlsoap.org/ws/2005/02/rm/policy";>
        <wsp:UsingPolicy/>

        <types>...</types>
        <message ...>...</message>
        <portType name="AlgebraServicePortType">
                <wsdl:operation name="Evaluate">
                        <wsdl:input name="Request" 
message="ns:EvaluationRequest" />
                        <wsdl:output name="Response" 
message="ns:EvaluationResponse" />
                </wsdl:operation>
        </portType>
        <binding name="SOAPportBinding" type="ns:AlgebraServicePortType">
                <wsp:PolicyReference URI="#SOAPBindingPolicy"/>
                <soap:binding transport="http://schemas.xmlsoap.org/soap/http"; 
style="document" />
                <wsdl:operation name="Evaluate">
                        <soap:operation soapAction="urn:Evaluate" 
style="document" />
                        <wsdl:input name="Request"><soap:body use="literal" 
/></wsdl:input>
                        <wsdl:output name="Response">   <soap:body 
use="literal" /></wsdl:output>
                </wsdl:operation>
        </binding>
        <service ...>...</service>

        <wsp:Policy wsu:Id="SOAPBindingPolicy">
                <wsp:ExactlyOne>
                        <wsp:All>
                                <wsaws:UsingAddressing 
xmlns:wsaws="http://www.w3.org/2006/05/addressing/wsdl"; />
                                <!--<wsrm:RMAssertion/>-->
                                <sp:SymmetricBinding>
                                        <wsp:Policy>
                                                ...
                                        </wsp:Policy>
                                </sp:SymmetricBinding>
                                <sp:Wss10>
                                        <wsp:Policy>
                                                <sp:MustSupportRefKeyIdentifier 
/>
                                                <sp:MustSupportRefIssuerSerial 
/>
                                        </wsp:Policy>
                                </sp:Wss10>
                                <sp:Wss11>
                                        <wsp:Policy>
                                                <sp:MustSupportRefKeyIdentifier 
/>
                                                <sp:MustSupportRefIssuerSerial 
/>
                                                <sp:MustSupportRefThumbprint />
                                                <sp:MustSupportRefEncryptedKey 
/>
                                        </wsp:Policy>
                                </sp:Wss11>
                                <sp:SignedParts>...</sp:SignedParts>
                                <sp:EncryptedParts...</sp:EncryptedParts>
                                <sc:KeyStore wspp:visibility="private" .../>
                                <sc:TrustStore wspp:visibility="private" ... />
                        </wsp:All>
                </wsp:ExactlyOne>
        </wsp:Policy>
</definitions>

I assume that it's a valid policy by the standards (looks ok, works with Sun's 
implementation).  I try to load it into CXF by engaging the policy engine in 
the cxf.xml (taken from CXF samples):

        <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>

I then initialize the Web Service stub on the client side by calling the 
constructor with a path to the above WSDL-file.  However, it does not seem to 
understand the policy.  The service works well, but no policy assertions are 
processed: WS-Addressing is not turned on, no security header is inserted, ...  
I read through the documentation but did not find any solution.

What's my mistake?  How can I use WS-Policy with CXF?  Could it be that the 
<wsp:PolicyReference .../> is not respected by CXF?

As a next step:  How do I specify a keystore for CXF?  The <sc:KeyStore .../> 
seems to be a proprietary Sun extension.

Any help is appreciated!

Yours,
        Till.

---------------------------------------------------------------------
Till Haselmann
Diplomand
viadee Unternehmensberatung GmbH
Anton-Bruchausen-Str. 8
48147 Münster
Telefon: +49 251 7 77 77 303
[EMAIL PROTECTED]
www.viadee.de
Sitz und Amtsgericht: Münster, HRB 4318
Geschäftsführer: Martina Wegener, Heinrich Riemann



Reply via email to