Hi,
I have solved my problem.
I post the solution that works for me:
Document d = DOMUtils.createDocument();
Element dev_email = d.createElement("developer_email");
dev_email.setTextContent("......");
SoapHeader sh_dev_email = new SoapHeader(new
QName("http://www.google.com/api/adsense/v2", "AccountServiceService"),
dev_email);
Element dev_pass = d.createElement("developer_password");
dev_pass.setTextContent("......");
SoapHeader sh_dev_pass = new SoapHeader(new
QName("http://www.google.com/api/adsense/v2", "AccountServiceService"),
dev_pass);
Element client_id = d.createElement("client_id");
client_id.setTextContent("......");
SoapHeader sh_client_id = new SoapHeader(new
QName("http://www.google.com/api/adsense/v2", "AccountServiceService"),
client_id);
List<Header> lshd = new ArrayList<Header>();
lshd.add(sh_dev_email);
lshd.add(sh_dev_pass);
lshd.add(sh_client_id);
lshd.add(sh_disp_loc);
requestContext.put(Header.HEADER_LIST, lshd);
In this way is possible to add Header values to the soap message.
Thanks to everyone that answer me... I appreciate your help!
Davide
-----Original Message-----
From: Pirola Davide [mailto:[EMAIL PROTECTED]
Sent: venerdì 20 luglio 2007 18.51
To: [email protected]
Subject: RE: Add SOAP HEADER value
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