Hi Bhole,
Thanks for your response!

I must call a web services (Google Adsense):
https://sandbox.google.com/api/adsense/v2/AccountService?wsdl

All services, accept request only if in the header contains some value (es: 
developer_email | developer_password ecc..), otherwise google send back an 
error.

So, in the WSDL they are defined... I simply need to add my values to the soap 
message.
Google put on its site a sample code for who use AXIS:
http://code.google.com/apis/adsense/developer/samples/java/CreateAccount.java.txt

I need to do the same thing, but with CXF :-D

Your code is valid also in this case?

Thanks
Davide

-----Original Message-----
From: Ulhas Bhole(IONA) [mailto:[EMAIL PROTECTED] 
Sent: venerdì 20 luglio 2007 17.53
To: [email protected]
Subject: Re: Add SOAP HEADER value

Hi Davide,

Are you trying to add soap headers that are not defined in WSDL? 
(Out-of-band Header) If yes then here is the code snippet that does the 
same.

 For adding header :
        InvocationHandler handler  = Proxy.getInvocationHandler(portType);
        BindingProvider  bp = null;

        try {
            if (handler instanceof BindingProvider) {
                bp = (BindingProvider)handler;
                Map<String, Object> requestContext = bp.getRequestContext();
               
                OutofBandHeader ob = new OutofBandHeader();
                ob.setName("testOobHeader");
                ob.setValue("testOobHeaderValue");
                ob.setHdrAttribute("testHdrAttribute");

                JAXBElement<OutofBandHeader> job = new 
JAXBElement<OutofBandHeader>(
                        new QName(TEST_HDR_NS, TEST_HDR_REQUEST_ELEM), 
OutofBandHeader.class, null, ob);
                Header hdr = new Header(
                        new QName(TEST_HDR_NS, TEST_HDR_REQUEST_ELEM),
                        job,
                        new JAXBDataBinding(ob.getClass()));

                List<Header> holder = new ArrayList<Header>();
                holder.add(hdr);
               
                //Add List of headerHolders to requestContext.
                requestContext.put(Header.HEADER_LIST, holder);
            }
        } catch (JAXBException ex) {
            //System.out.println("failed to insert header into request 
context :" + ex);
        }
       


For Accessing the headers received from server :

        InvocationHandler handler  = Proxy.getInvocationHandler(portType);
        BindingProvider  bp = null;
        if (handler instanceof BindingProvider) {
            bp = (BindingProvider)handler;
            Map<String, Object> responseContext = bp.getResponseContext();
            OutofBandHeader hdrToTest = null;
            List oobHdr = (List) responseContext.get(Header.HEADER_LIST);
            if (oobHdr == null) {
                fail("Should have got List of out-of-band headers ..");
            }
           
            if (oobHdr != null & oobHdr instanceof List) {
                Iterator iter = oobHdr.iterator();
                while (iter.hasNext()) {
                    Object hdr = iter.next();
                    if (hdr instanceof Header) {
                        Header hdr1 = (Header) hdr;
                        if (hdr1.getObject() instanceof Node) {
                            //System.out.println("Node conains : " + 
hdr1.getObject().toString());
                            try {
                                JAXBElement job = (JAXBElement) 
JAXBContext.newInstance(ObjectFactory.class)
                                    .createUnmarshaller()
                                    .unmarshal((Node) hdr1.getObject());
                                hdrToTest = (OutofBandHeader) 
job.getValue();
//                                 System.out.println("oob-hdr contains 
: \nname = "
//                                       + hdrToTest.getName()
//                                       + "  \nvalue = " + 
hdrToTest.getValue()
//                                       + " \natribute = " + 
hdrToTest.getHdrAttribute());
                            } catch (JAXBException ex) {
                                //
                                ex.printStackTrace();
                            }
                        }
                    }
                }
            }


This code snippet is from the System test and it uses JAXB generated 
class for headers but is not limited to JAXB.

Regards,

Ulhas Bhole

Pirola Davide wrote:
> Hi,
>
> anyone know how to add some value to Soap Header in cxf?
>
> I have generated a client code with "wsdl2java", but I don't know how to
> add this values to the soap header of the message.
>
> I tried with this code:
>
>  
>
>   Map<String, Object> soapHeaders = new HashMap<String, Object>();
>
>     List h1 = new ArrayList();
>
>     h1.add("value1");
>
>     soapHeaders.put("parameter1", h1);
>
>     List h2 = new ArrayList();
>
>     h2.add("parameter2");
>
>     soapHeaders.put("value2", h2);
>
>      ...
>
>      ...
>
>     requestContext.put(MessageContext.HTTP_REQUEST_HEADERS,
> soapHeaders);
>
>  
>
> but, this seems that they are ignored by the server part of the web
> services.
>
>  
>
> Thanks
>
> Davide
>
>
>   

----------------------------
IONA Technologies PLC (registered in Ireland)
Registered Number: 171387
Registered Address: The IONA Building, Shelbourne Road, Dublin 4, Ireland

Reply via email to