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
