Can you add an @XmlRootElement annotation to User?   If you add the name and 
namespace attributes to that, I think it would be readable.   

Dan


On Friday 11 June 2010 10:13:43 am Cecchi Sandrone wrote:
> 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().unmar
> shal((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

Reply via email to