cancel
Showing results for 
Search instead for 
Did you mean: 

How to retrieve information from XML using servlets

Former Member
0 Kudos

Hi

I have a scenario like this

File-->XI-->J2ee application(HTTP Receiver adapter)

I want to know how XI sends xml file as a query string file name?

What ever may be the case i just need to retrieve the information from Request object and display the same in browser(JSP).How to do that, I am totally confused, please anyone help me!

Code help is highly rewarded.

Thanx

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

Hi

please have a look at this code which takes the Input stream and print xml to the out

public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

doWork(req, resp);

}

public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

doWork(req, resp);

}

private void doWork(HttpServletRequest req, HttpServletResponse resp) {

String path = null;

Writer out = null;

try {

resp.setContentType("text/xml");

out = resp.getWriter();

path = req.getPathInfo();

if(req.getContentLength() != -1){

outputURI(req.getInputStream(), out);

}

} catch (IOException ioe) {

return;

}

private void outputURI(InputStream resultStream, Writer out) {

if (resultStream == null) {

// no default file

//logger.error("No File to return");

return;

}

try {

DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();

//Class clazz = loader.loadClass("org.apache.xerces.jaxp.DocumentBuilderFactoryImpl");

//DocumentBuilderFactoryImpl factory = (DocumentBuilderFactoryImpl) clazz.newInstance();

//DocumentBuilder parser = factory.newDocumentBuilder();

parser.setEntityResolver(new ClasspathEntityResolver());

printXML(parser.parse(resultStream), out);

resultStream.close();

} catch (Exception e) {

//logger.error("Trying to parse the output " , e);

}

}

private void printXML(Document document, Writer writer) throws Exception {

Transformer transformer = TransformerFactory.newInstance().newTransformer();

Source source = new DOMSource(document);

Result output = new StreamResult(System.out);

transformer.transform(source, output);

// Write as XML so that entity references can be resolved.

if (writer != null) {

transformer.transform(source, new StreamResult(writer));

}

}

hope this helps , please mark points for helpful answers

regards

rajeshkr

Former Member
0 Kudos

Hi Rajesh!

I have tried your code. But some where i went wrong. Please correct me: I am using NWDS2.0.9

my web.xml:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

<display-name>WEB APP</display-name>

<description>WEB APP description</description>

<servlet>

<servlet-name>DisplayRes</servlet-name>

<servlet-class>com.quinnox.DisplayRes</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>DisplayRes</servlet-name>

<url-pattern>/DisplayRes/*</url-pattern>

</servlet-mapping>

</web-app>

my application.xml:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE application PUBLIC "-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN"

"http://java.sun.com/dtd/application_1_3.dtd">

<application>

<display-name>ReceiverEntpr</display-name>

<description>EAR description</description>

<module>

<web>

<web-uri>HttpReceiver.war</web-uri>

<context-root>/HttpReceiver</context-root>

</web>

</module>

</application>

and my servlet code:

import java.io.IOException;

import java.io.InputStream;

import java.io.PrintWriter;

import java.io.Writer;

import javax.servlet.ServletException;

import javax.servlet.ServletOutputStream;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

import org.w3c.dom.Node;

import org.w3c.dom.NodeList;

import org.xml.sax.InputSource;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.transform.Result;

import javax.xml.transform.Source;

import javax.xml.transform.Transformer;

import javax.xml.transform.TransformerFactory;

import javax.xml.transform.dom.DOMSource;

import javax.xml.transform.stream.StreamResult;

import org.xml.sax.EntityResolver;

import org.xml.sax.SAXException;

import com.sun.java_cup.internal.parser;

import com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl;

public class DisplayRes extends HttpServlet {

public void doGet(HttpServletRequest requset, HttpServletResponse response) throws ServletException, IOException

{

doWork(requset, response);

}

public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException

{

doWork(req, resp);

}

private void doWork(HttpServletRequest req, HttpServletResponse resp) throws IOException

{

String path = null;

PrintWriter out = null;

PrintWriter p2=resp.getWriter();

try

{

resp.setContentType("text/xml");

out = resp.getWriter();

out.println("hi");

path = req.getPathInfo();

if(req.getContentLength() != -1){

outputURI(req.getInputStream(), out);

}

} catch (IOException ioe) { return;

}

}

//private void outputURI(InputStream resultStream, Writer out) {

private void outputURI(InputStream resultStream, PrintWriter out) {

if (resultStream == null) {

// no default file

// logger.error("No File to return");

return;

}

try {

DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();

// Class clazz = loader.loadClass("org.apache.xerces.jaxp.DocumentBuilderFactoryImpl");

// DocumentBuilderFactoryImpl factory = (DocumentBuilderFactoryImpl) clazz.newInstance();

// DocumentBuilder parser = factory.newDocumentBuilder();

parser.setEntityResolver(new ClassPathEntityResolver());

printXML(parser.parse(resultStream), out);

resultStream.close();

} catch (Exception e) {

// logger.error("Trying to parse the output " , e);

}

}

//private void printXML(Document document, Writer writer) throws Exception {

private void printXML(Document document, PrintWriter writer) throws Exception {

Transformer transformer = TransformerFactory.newInstance().newTransformer();

Source source = new DOMSource(document);

Result output = new StreamResult(System.out);

transformer.transform(source, output);

// Write as XML so that entity references can be resolved.

if (writer != null) {

transformer.transform(source, new StreamResult(writer));

}

}

}

Please tell me how to display in servlet.

If it is better to display in a browser. Please send me the code.

Thanks

Former Member
0 Kudos

Hi

The code is not displaying any thing on browser.

I deployed the appl on Weblogic9.0 server. How to test whether XI is sending the XML file to my J2EE appl.

I have used NWDS2.0.9 for developing J2EE appl.

This is my application.xml file:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE application PUBLIC "-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN"

"http://java.sun.com/dtd/application_1_3.dtd">

<application>

<display-name>HTTPReceiver_EAR</display-name>

<description>EAR description</description>

<module>

<web>

<web-uri>HttpReceiver.war</web-uri>

<context-root>/Invoke</context-root>

</web>

</module>

</application>

This is my web.xml:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

<display-name>WEB APP</display-name>

<description>WEB APP description</description>

<servlet>

<servlet-name>DisplayRes</servlet-name>

<servlet-class>com.abc.DisplayRes</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>DisplayRes</servlet-name>

<url-pattern>/DisplayRes/*</url-pattern>

</servlet-mapping>

</web-app>

public class DisplayRes extends HttpServlet {

public void doGet(HttpServletRequest requset, HttpServletResponse response) throws ServletException, IOException

{

doWork(requset, response);

}

public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException

{

doWork(req, resp);

}

private void doWork(HttpServletRequest req, HttpServletResponse resp) throws IOException

{

String path = null;

Writer out = null;

//PrintWriter out = null;

PrintWriter p2=resp.getWriter();

//ServletOutputStream outp = resp.getOutputStream();

//p2.println("This is doWork");

try

{

resp.setContentType("text/xml");

out = resp.getWriter();

// out.println("hi");

path = req.getPathInfo();

//p2.println("path is"+ path);

if(req.getContentLength() != -1){

outputURI(req.getInputStream(), out);

}

} catch (IOException ioe) {

p2.println("IOException "+ ioe);

//return;

}

}

//private void outputURI(InputStream resultStream, Writer out) {

private void outputURI(InputStream resultStream, Writer out) {

if (resultStream == null) {

// no default file

// logger.error("No File to return");

return;

}

try {

DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();

// Class clazz = loader.loadClass("org.apache.xerces.jaxp.DocumentBuilderFactoryImpl");

// DocumentBuilderFactoryImpl factory = (DocumentBuilderFactoryImpl) clazz.newInstance();

// DocumentBuilder parser = factory.newDocumentBuilder();

parser.setEntityResolver(new ClassPathEntityResolver());

printXML(parser.parse(resultStream), out);

resultStream.close();

} catch (Exception e) {

// logger.error("Trying to parse the output " , e);

}

}

//private void printXML(Document document, Writer writer) throws Exception {

private void printXML(Document document, Writer writer) throws Exception {

Transformer transformer = TransformerFactory.newInstance().newTransformer();

Source source = new DOMSource(document);

Result output = new StreamResult(System.out);

transformer.transform(source, output);

// Write as XML so that entity references can be resolved.

if (writer != null) {

transformer.transform(source, new StreamResult(writer));

}

}

}

Help is highly rewarded.

Thanks

Former Member
0 Kudos

Hi

Can you do a remote debug to the servlet and check in the Request Object whether the required Input is present and let me know

regards

rajesh kr

Former Member
0 Kudos

Hi!

How to debug a servlet remotely i am using NWDS2.0.9

Thanks

Former Member
0 Kudos

Hi

This link will guide you thro

http://help.sap.com/saphelp_nw04/helpdata/en/a8/def86ab54da5418a3575373934ca00/frameset.htm

Hope this helps , please mark points for helpful answers

regards

rajeshkr

Answers (0)