Thanks Eoghan,

Maybe I'll try to go the interceptor route.  Unless I'm mistaken, I should
try to modify the message at the WRITE phase?

I've updated my code:

            MyInterceptor myInterceptor = new MyInterceptor();

            ClientProxyFactoryBean factory = new ClientProxyFactoryBean();
            factory.setServiceClass(OrderServiceSoap.class);
            factory.setAddress("
https://uatwebservice.jcorp.com/OrderService.asmx";);
            factory.getFeatures().add( new WSAddressingFeature() );
            factory.getOutInterceptors().add( myInterceptor );

            OrderServiceSoap os = (OrderServiceSoap) factory.create();

            os.getStudy( 234 );

where my interceptor class is:

public class MyInterceptor extends AbstractSoapInterceptor {
      public MyInterceptor() {
        super(Phase.WRITE);
      }

    @Override
    public void handleMessage(SoapMessage arg0) throws Fault
    {
        AddressingPropertiesImpl inMaps =
RMContextUtils.retrieveMAPs(arg0.getMessage(),false, false);

inMaps.exposeAs(VersionTransformer.Names200408.WSA_NAMESPACE_NAME);
    }
}

which is throwing the exception:

WARNING: WS-Addressing - failed to retrieve Message Addressing Properties
from context
Nov 3, 2009 2:17:26 PM org.apache.cxf.phase.PhaseInterceptorChain
doIntercept
WARNING: Interceptor has thrown exception, unwinding now


I thought this:
factory.getFeatures().add( new WSAddressingFeature() );

would create the addressing properties?  I think I missing something pretty
major here.

Cheers,
Jason.



2009/11/3 Eoghan Glynn <[email protected]>

> Jason,
>
> Our support for WS-A 2004/08 was added specifically for the CXF WS-RM
> implementation, as WS-RM 1.0 depended on that older version of WS-A.
>
> As a result the mechanism for enabling this feature is a tad unfriendly,
> requiring an API call on the AddressingProperties to specify the WS-A
> version you require.
>
> See for example how the WS-RM code calls this exposeAs() API:
>
>
> http://svn.apache.org/repos/asf/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMManager.java
>
> AddressingPropertiesImpl inMaps = RMContextUtils.retrieveMAPs(message,
> false, false);
>
> inMaps.exposeAs(VersionTransformer.Names200408.WSA_NAMESPACE_NAME);
>
> You could write a simple interceptor to run after the WS-A MapAggregator
> which takes a similar approach to the above.
>
> Cheers,
> Eoghan
>
>
> 2009/11/3 Jason Clark <[email protected]>
>
> > Hello all,
> >
> > Has anyone here had an opportunity to use the 2004/08 version of
> > WS-Addressing  (http://schemas.xmlsoap.org/ws/2004/08/addressing).
> >
> > The service I'm attempting to connect to will only accept that version.
>  I
> > see on http://cwiki.apache.org/CXF20DOC/ws-addressing.html that "CXF
> > provides support for the 2004-08 and 1.0 versions of WS-Addressing.", but
> > haven't been able to determine what it is I need to do to change it.
> >
> > In Axis2 1.4, I'm able to explicitly specify the version by :
> >
> >
> >
> options.setProperty(org.apache.axis2.addressing.AddressingConstants.WS_ADDRESSING_VERSION,
> >
> org.apache.axis2.addressing.AddressingConstants.Submission.WSA_NAMESPACE);
> >
> >
> > With CXF, I've set up WS-Addressing with:
> >
> >            ClientProxyFactoryBean factory = new ClientProxyFactoryBean();
> >            factory.setServiceClass(OrderServiceSoap.class);
> >            factory.setAddress("
> > https://webservice.jcorp.com/OrderService.asmx";);
> >            factory.getFeatures().add(new WSAddressingFeature() );
> >
> >  And when I examine the raw request, I see:
> >
> > <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/";>
> >    <soap:Header>
> >        <Action xmlns="*http://www.w3.org/2005/08/addressing*";>
> >            http://service.jcorp.com/OrderServiceSoapPortType/getStudy
> >        </Action>
> >        <MessageID xmlns="*http://www.w3.org/2005/08/addressing*";>
> >            urn:uuid:a559ae80-d667-4795-8d74-3e3c2319d1b3</MessageID>
> >        <To xmlns="http://www.w3.org/2005/08/addressing";>
> > https://service.jcorp.com/OrderService.asmx
> >        </To>
> >        <ReplyTo xmlns="http://www.w3.org/2005/08/addressing";>
> >            <Address>http://www.w3.org/2005/08/addressing/anonymous
> >            </Address>
> >        </ReplyTo>
> >    </soap:Header>
> >    <soap:Body>
> >        <ns1:getStudy xmlns:ns1="http://service.jcorp.com/";>
> >            <ns2:arg0 xmlns="http://jcorp.com/service";
> >                xmlns:ns2="http://service.jcorp.com/";>234</ns2:arg0>
> >        </ns1:getStudy>
> >    </soap:Body>
> > </soap:Envelope>
> >
> > So it's attempting to do the right thing.  Could someone please point me
> in
> > the right direction?
> >
>

Reply via email to