I successfully added metadata in the soap header using the following
interceptor:

public class OutputInterceptor extends AbstractSoapInterceptor {

    public OutputInterceptor() {
        super(Phase.WRITE);
    }

    public void handleMessage(SoapMessage message) throws Fault {
        
        SoapMessage soapMessage = (SoapMessage) message;
        List<Header> list = message.getHeaders();
       
        QName q = new QName("http://common.ws.model.plx.ids.it/";, "User");
        User user = new User();
        user.setName("a.dionisi");
        JAXBDataBinding dataBinding = null;
        try {
                dataBinding = new JAXBDataBinding(user.getClass());
        } catch (JAXBException e1) {
                e1.printStackTrace();
        }
       
        SoapHeader header = new SoapHeader(q,user, dataBinding);
        list.add(header); 
    }
}

I checked the output SOAP message and it's correct.

Now, the problem is that I don't know how to unmarshal the User object.
I tried with this input interceptor:

public class InputInterceptor extends AbstractSoapInterceptor {

        public FaultInterceptor() {
                super(Phase.UNMARSHAL);
        }

        public void handleMessage(SoapMessage message) throws Fault {
        
        Header h = message.getHeaders().get(1);          
        
        try {
            JAXBElement job =
(JAXBElement)JAXBContext.newInstance(User.class).createUnmarshaller().unmarshal((Node)
h.getObject());
            User u = (User)job.getValue();
        } catch (JAXBException ex) {
            //
            ex.printStackTrace();
        }
    }
}

but I receive the following exception:

javax.xml.bind.UnmarshalException: unexpected element
(uri:"http://common.ws.model.plx.ids.it/";, local:"User"). Expected elements
are (none)

Any suggestion on how to read an object in the SoapHeader?
Thanks


dkulp wrote:
> 
> On Friday 11 June 2010 7:08:18 am Cecchi Sandrone wrote:
>> Hey Glen, your links are very interesting, especially the last. I'm
>> following that way now...
>> 
>> One thing I don't understand; how can I specify that an entire service
>> takes also some parameters in the header? I would have the possibility to
>> not specify those parameters in every call. For example (PSEUDO CODE):
>> 
>> Service s = new Service();
>> s.setLocale("en-US");
>> 
>> s.callMethod1(param1)
>> s.callMethod2(param2)
>> s.callMethod3(param3)
>> 
>> In the way you described, as I understand, every method in the remote
>> interface must add further parameters. For me, it would desiderable to
>> not
>> change the existing interface because I have a great amount of services.
> 
> If you look at the FAQ:
> http://cxf.apache.org/faq.html#FAQ-
> HowcanIaddsoapheaderstotherequest%252Fresponse%253F
> 
> there are some options.     The Headers set on the request context would
> be 
> sent for all the calls.
> 
> Dan
> 
> 
>> 
>> Cecchi Sandrone wrote:
>> > Thank you I will try one of these!
>> > 
>> > Glen Mazza wrote:
>> >> Sure, with JAX-WS Handlers--take a look at the SOAPHandler.java in
>> Step
>> >> #5 here: http://www.jroller.com/gmazza/entry/jaxws_handler_tutorial .
>> >> CXF interceptors are another option, check ClientInterceptors.java
>> >> here:
>> >> http://www.jroller.com/gmazza/entry/jaxwshandlers_to_cxfinterceptors.
>> >> 
>> >> In either case, you'll most probably want to add these elements to the
>> >> soap header, not the soap body.
>> >> 
>> >> Finally, if you're allowed to do WSDL modification, you can add the
>> >> metadata as implicit SOAP headers which will give you an actual
>> >> parameter in your SOAP calls to add this data:
>> >> http://www.jroller.com/gmazza/entry/using_implicit_soap_headers_with.
>> >> 
>> >> HTH,
>> >> Glen
>> >> 
>> >> Cecchi Sandrone wrote:
>> >>> I was wondering if it's possible to add some metadata to a WebService
>> >>> call. In my case this can be useful to send the client locale; this
>> can
>> >>> be very useful to translate error messages or other strings in the
>> >>> server side. Is it possible to do?
> 
> -- 
> Daniel Kulp
> [email protected]
> http://dankulp.com/blog
> 
> 

-- 
View this message in context: 
http://old.nabble.com/Add-metadata-to-a-service-call-tp28831515p28855763.html
Sent from the cxf-user mailing list archive at Nabble.com.

Reply via email to