cancel
Showing results for 
Search instead for 
Did you mean: 

How to set soap headers in java.

former_member194481
Participant
0 Kudos

Hi Experts, I need to set the soap headers from the xml which i have . with that i need to call the certain services. kindly help me in solving the problem Code :- import java.io.*; import java.net.MalformedURLException; import org.apache.cxf.binding.soap.SoapHeader; import java.util.ArrayList; import java.util.List; import org.apache.cxf.binding.soap.SoapHeader; import org.apache.xmlbeans.impl.soap.SOAPHeaderElement; import javax.xml.namespace.QName; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; public class SFDC_New { public static void main (String args[])throws ParserConfigurationException, TransformerException, MalformedURLException { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); dbf.setIgnoringElementContentWhitespace(true); dbf.setValidating(false); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.newDocument(); Element Envelope = doc.createElementNS("http://schemas.xmlsoap.org/soap/envelope/", "Envelope"); Envelope.setPrefix("soapenv"); Envelope.setAttribute("xmlns:urn", "urn:enterprise.soap.sforce.com"); Element Header = doc.createElement("soapenv:Header"); //Header.setPrefix("soapenv"); Envelope.appendChild(Header); Element PackageVersionHeader = doc.createElementNS("urn:enterprise.soap.sforce.com", "urn:PackageVersionHeader"); Header.appendChild(PackageVersionHeader); Element PackageVersions = doc.createElementNS("urn:enterprise.soap.sforce.com", "urn:PackageVersions"); PackageVersionHeader.appendChild(PackageVersions); Element majorNumber = doc.createElementNS("urn:enterprise.soap.sforce.com", "urn:majorNumber"); PackageVersions.appendChild(majorNumber); Element minorNumber = doc.createElementNS("urn:enterprise.soap.sforce.com", "urn:minorNumber"); PackageVersions.appendChild(minorNumber); Element namespace = doc.createElementNS("urn:enterprise.soap.sforce.com", "urn:namespace"); PackageVersions.appendChild(namespace); Element MruHeader = doc.createElementNS("urn:enterprise.soap.sforce.com", "urn:MruHeader"); Header.appendChild(MruHeader); Element updateMru = doc.createElementNS("urn:enterprise.soap.sforce.com" , "urn:updateMru"); MruHeader.appendChild(updateMru); Element QueryOptions = doc.createElementNS("urn:enterprise.soap.sforce.com", "urn:QueryOptions"); Header.appendChild(QueryOptions); Element batchSize =  doc.createElementNS("urn:enterprise.soap.sforce.com", "urn:batchSize"); QueryOptions.appendChild(batchSize); Element SessionHeader =  doc.createElementNS("urn:enterprise.soap.sforce.com", "urn:SessionHeader"); Header.appendChild(SessionHeader); Element sessionId = doc.createElementNS("urn:enterprise.soap.sforce.com", "urn:sessionId"); SessionHeader.appendChild(sessionId); Element Body = doc.createElement("soapenv:Body"); Envelope.appendChild(Body); Element query = doc.createElementNS("urn:enterprise.soap.sforce.com","urn:query"); Body.appendChild(query); Element queryString =  doc.createElementNS("urn:enterprise.soap.sforce.com", "urn:queryString"); query.appendChild(queryString); StringWriter sw = new StringWriter(); StreamResult result = new StreamResult(sw); DOMSource source = new DOMSource(Envelope); TransformerFactory tf =  TransformerFactory.newInstance(); Transformer transformer = tf.newTransformer(); transformer.transform(source, result); String xmlString = sw.toString(); //System.out.println(xmlString); SoapHeader soapHeader = new SoapHeader(new QName(Envelope.getNamespaceURI(), Envelope.getLocalName()), Envelope); soapHeader.setMustUnderstand(true); List headersList = new ArrayList(); List headerList = new ArrayList(); headerList.add(xmlString); //System.out.println("Headers List is " +headerList); System.out.println(headerList); } } When i am running the code i am getting the error as Headers are null. Thanks in advance, Vijay

Accepted Solutions (0)

Answers (1)

Answers (1)

former_member194481
Participant
0 Kudos

0 2 Vijay 1 1 Vijay queryString

markangelo_dihiansan
Active Contributor
0 Kudos

Hi Vijay,

What is wrong with the code I have provided?

http://scn.sap.com/thread/3836566

Regards,

Mark

former_member194481
Participant
0 Kudos

Hi Dihiansan, The code which you given is superb,and it is working fine. But i need to send the xml headers generated out of your code needs to send as a SOap headers  so i need to know how can i send that. Also your code contains static methods which is fine but in HCI to put i need to have only non-static methods, so i have changed my code as per your code reference . So kindly help me in setting the SOAP Headers in java. Thanks and Regards, Vijay

markangelo_dihiansan
Active Contributor
0 Kudos

Hi Vijay,


Also your code contains static methods which is fine but in HCI to put i need to have only non-static methods, so i have changed my code as per your code reference . So kindly help me in setting the SOAP Headers in java. Thanks and Regards, Vijay

Commenting these out in your code


// SoapHeader soapHeader = new SoapHeader(new QName(Envelope.getNamespaceURI(),Envelope.getLocalName()), Envelope);
// soapHeader.setMustUnderstand(true);
// List headersList = new ArrayList();
// List headerList = new ArrayList();
// headerList.add(xmlString);
//System.out.println("Headers List is " +headerList);
// System.out.println(headerList);

Already produces a SOAP Header without any values. If you want to set values, use the setTextContext method e.g adding this line

Would already set a value for majorNumber

Regards,

Mark