on 12-09-2015 6:11 AM
Hi Experts,
I need to create the below xml structure , but i am not able to create it exactly kindly help me in creating it.
I am able to create a below structure but without namespace prefix like URN
XML required :-
<!--Zero or more repetitions:-->
<urn:majorNumber>?</urn:majorNumber>
<urn:minorNumber>?</urn:minorNumber>
<urn:namespace>?</urn:namespace>
<urn:updateMru>?</urn:updateMru>
<urn:batchSize>?</urn:batchSize>
<urn:sessionId>?</urn:sessionId>
<urn:queryString>?</urn:queryString>
Kindly help me in solving the issue.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Vijay,
I've modified your code a little bit:
import java.io.*;
import java.net.MalformedURLException;
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.apache.cxf.binding.soap.SoapHeader;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class Test {
private static Element createElement(String name, Element el, Document doc){
Element element = doc.createElement(name);
el.appendChild(element);
return element;
}
private static void createElement(String name, Element el, Document doc, String value){
Element element = doc.createElement(name);
el.appendChild(element);
if(!value.equals("")){
element.setTextContent(value);
}
}
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=createElement("soapenv:Header",Envelope,doc);
Element PackageVersionHeader=createElement("urn:PackageVersionHeader",Header,doc);
Element PackageVersions=createElement("urn:PackageVersions",PackageVersionHeader,doc);
createElement("urn:majorNumber",PackageVersions,doc,"0");
createElement("urn:minorNumber",PackageVersions,doc,"2");
createElement("urn:namespace",PackageVersions,doc,"Vijay");
Element MruHeader=createElement("urn:MruHeader",Header,doc);
createElement("urn:updateMru",MruHeader,doc,"1");
Element QueryOptions=createElement("urn:QueryOptions",Header,doc);
createElement("urn:batchSize",QueryOptions,doc,"1");
Element SessionHeader=createElement("urn:SessionHeader",Header,doc);
createElement("urn:sessionId",SessionHeader,doc,"Vijay");
Element Body=createElement("soapenv:Body",Envelope,doc);
Element query=createElement("urn:query",Body,doc);
createElement("urn:queryString",query,doc,"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);
}
}
Output
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:urn="urn:enterprise.soap.sforce.com" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<urn:PackageVersionHeader>
<urn:PackageVersions>
<urn:majorNumber>0</urn:majorNumber>
<urn:minorNumber>2</urn:minorNumber>
<urn:namespace>Vijay</urn:namespace>
</urn:PackageVersions>
</urn:PackageVersionHeader>
<urn:MruHeader>
<urn:updateMru>1</urn:updateMru>
</urn:MruHeader>
<urn:QueryOptions>
<urn:batchSize>1</urn:batchSize>
</urn:QueryOptions>
<urn:SessionHeader>
<urn:sessionId>Vijay</urn:sessionId>
</urn:SessionHeader>
</soapenv:Header>
<soapenv:Body>
<urn:query>
<urn:queryString>queryString</urn:queryString>
</urn:query>
</soapenv:Body>
</soapenv:Envelope>
Regards,
Mark
Hi Vijay
Did you try using the createElementNS() method of the Document class instead of createElement()?
You might want to share your code if you require further help.
Rgds
Eng Swee
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Yeoh,
Yes, i have tried it actually the problem is i want to declare the namespace and refer it with the prefix.
code what i have tried
import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
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.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.apache.cxf.binding.soap.SoapHeader;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class SFDC_SoapHeaders {
public static void main(String args[]) throws ParserConfigurationException, TransformerException, MalformedURLException
{
// URL namespaceUrl = new URL("urn:enterprise.soap.sforce.com");
// String namespaceact = "xmlns:urn="+namespaceUrl.toString();
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
dbf.setIgnoringElementContentWhitespace(true);
dbf.setValidating(false);
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.newDocument();
//Element Envelope = doc.createElement("Envelope");
//Envelope.setAttributeNS("http://schemas.xmlsoap.org/soap/envelope/", "Envelope", "soapenv");
Element Header = doc.createElementNS("http://schemas.xmlsoap.org/soap/envelope/", "soapenv");
// Header.setAttribute("xmlns:soapenv", "asdsa");
// Header.setAttributeNS("http://schemas.xmlsoap.org/soap/envelope/", "soapenv", "urn:enterprise.soap.sforce.com");
Header.setPrefix("Soapenv");
Header.setAttribute("xmlns:urn", "urn:enterprise.soap.sforce.com");
//.appendChild(Header);
Element PackageVersionHeader = doc.createElement("PackageVersionHeader");
Header.appendChild(PackageVersionHeader);
Element packageVersions = doc.createElement( "packageVersions");
PackageVersionHeader.appendChild(packageVersions);
Element majorNumber = doc.createElement( "majorNumber");
PackageVersionHeader.appendChild(majorNumber);
majorNumber.setTextContent("0");
//majorNumber.setPrefix("urn");
majorNumber.setAttribute("urn", "urn=urn:enterprise.soap.sforce.com");
Element minorNumber = doc.createElement("minorNumber");
PackageVersionHeader.appendChild(minorNumber);
minorNumber.setTextContent("2");
Element namespace = doc.createElement("namespace");
PackageVersionHeader.appendChild(namespace);
namespace.setTextContent("Vijay2");
//namespace.setPrefix("urn");
Element MruHeader = doc.createElement("MruHeader");
Header.appendChild(MruHeader);
Header.setPrefix("urn");
Header.setAttribute("urn", "urn=urn:enterprise.soap.sforce.com");
Element updateMru = doc.createElementNS("urn=urn:enterprise.soap.sforce.com","updateMru");
MruHeader.appendChild(updateMru);
updateMru.setPrefix("urn");
updateMru.setAttribute("urn", "urn=urn:enterprise.soap.sforce.com");
updateMru.setTextContent("1");
Element QueryOptions = doc.createElement("QueryOptions");
Header.appendChild(QueryOptions);
Header.setPrefix("urn");
Header.setAttribute("urn", "urn=urn:enterprise.soap.sforce.com");
Element batchSize = doc.createElement("batchSize");
QueryOptions.appendChild(batchSize);
batchSize.setTextContent("1");
Element SessionHeader = doc.createElement("SessionHeader");
Header.appendChild(SessionHeader);
Element sessionId = doc.createElementNS("urn=urn:enterprise.soap.sforce.com", "sessionId");
SessionHeader.appendChild(sessionId);
sessionId.setTextContent("Vijay");
//SoapHeader soapheader = new SoapHeader(new QName(Header.getNamespaceURI(),
// Header.getLocalName()), Header);
//soapheader.setActor("actor_test");
//soapheader.setMustUnderstand(true);
StringWriter sw = new StringWriter();
StreamResult result = new StreamResult(sw);
DOMSource source = new DOMSource(Header);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.transform(source, result);
String xmlString = sw.toString();
System.out.println(xmlString);
}
}
Output it
<?xml version="1.0" encoding="UTF-8"?>
<urn:soapenv xmlns:urn="urn:enterprise.soap.sforce.com" urn="urn=urn:enterprise.soap.sforce.com">
<PackageVersionHeader>
<packageVersions/>
<majorNumber urn="urn=urn:enterprise.soap.sforce.com">0</majorNumber>
<minorNumber>2</minorNumber>
<namespace>Vijay2</namespace>
</PackageVersionHeader>
<MruHeader>
<urn:updateMru xmlns:urn="urn=urn:enterprise.soap.sforce.com" urn="urn=urn:enterprise.soap.sforce.com">1</urn:updateMru>
</MruHeader>
<QueryOptions>
<batchSize>1</batchSize>
</QueryOptions>
<SessionHeader>
<sessionId xmlns="urn=urn:enterprise.soap.sforce.com">Vijay</sessionId>
</SessionHeader>
</urn:soapenv>
Kindly help me in solving the issue.
I think the usage of the method is incorrect.
It should be like that
Element updateMru = doc.createElementNS("urn:enterprise.soap.sforce.com","urn:updateMru");
The first argument is the namespace, the second is the name of the element with a prefix.
Also try to comment out the setAttribute() calls.
Try this out and see how your output looks like.
User | Count |
---|---|
86 | |
10 | |
10 | |
9 | |
7 | |
7 | |
6 | |
5 | |
4 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.