Solved

Reading an XML file in WEB-INF with Bean

Posted on 2010-11-14
6
922 Views
Last Modified: 2012-05-10
Hi there experts,

i have a short question:
I'm currently writing my own Web Application with Java and this Webapplication has its own configuration xml files. These files are under the WEB-INF folder, so only the Servlet or JSP can access it.
Now i want to write a Java Bean that reads this config-files and provides some getter functions...
The reason, why i want to write a bean is, because this config files should be accessed by many servlets and some JSPs.

How can i access the config files with a java bean?
and what would be the best way to parse the XMLs?


thx for your help and best regards!
manuel
0
Comment
Question by:mesX
  • 3
  • 3
6 Comments
 
LVL 27

Expert Comment

by:rrz
ID: 34132880
Please read
previous discussion  
We can help you with anyway you want to go with this.
JSTL is the easy way to go.  
0
 

Author Comment

by:mesX
ID: 34134259
Hi and thx for your comment!
As i understand JSTL is only for JSP pages, isn't it?
... and i can't use it within a Java Bean?

Or is my understanding of a Java Bean wrong?
What i want to do is, that my Servlets and JSPs create an Object from my "ApplicationConfig" class which parses the XML and has some getter functions like "String[] getAllEmployeeNames()". So if i change the XML file one day, i just have to re-write my ApplicationConfig class.

Please correct me if my idea is not a good one, because i'm very new to all this :)

regards
Manuel
0
 
LVL 27

Accepted Solution

by:
rrz earned 500 total points
ID: 34138005
To get started, try this code.
The file employees.xml contains  
<?xml version="1.0"?>
<company>
	<employee>
		<firstname>John</firstname>
		<lastname>Smith</lastname>
	</employee>
	<employee>
		<firstname>Jane</firstname>
		<lastname>Doe</lastname>
	</employee>
	<employee>
		<firstname>Jerry</firstname>
		<lastname>Brown</lastname>
	</employee>
</company>

Open in new window


put that xml file into your web app's classes folder.

Create a JSP containing  
<jsp:useBean id="reader" class="rrz.XMLReader" />
<%=reader.read()%>

Open in new window


This is just quick and dirty demo code. We should create getter and setter methods for fields in your bean.
Show us an example of your XML and tell us what you want to access, if you want more help.

package rrz;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class XMLReader {
  public String read(){
      StringBuilder sb = new StringBuilder();
      try {
           DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
           DocumentBuilder db = dbf.newDocumentBuilder();
           Document doc = db.parse(getClass().getClassLoader().getResourceAsStream("employees.xml"));
           doc.getDocumentElement().normalize();
           sb.append("Root element " + doc.getDocumentElement().getNodeName() + "<br/>");
           NodeList nodeLst = doc.getElementsByTagName("employee");
           sb.append("Information of all employees" + "<br/>");
           for (int s = 0; s < nodeLst.getLength(); s++) {
              Node fstNode = nodeLst.item(s);
              if (fstNode.getNodeType() == Node.ELEMENT_NODE) {
                 Element fstElmnt = (Element) fstNode;
                 NodeList fstNmElmntLst = fstElmnt.getElementsByTagName("firstname");
                 Element fstNmElmnt = (Element) fstNmElmntLst.item(0);
                 NodeList fstNm = fstNmElmnt.getChildNodes();
                 sb.append("First Name : "  + ((Node) fstNm.item(0)).getNodeValue() + "<br/>");
                 NodeList lstNmElmntLst = fstElmnt.getElementsByTagName("lastname");
                 Element lstNmElmnt = (Element) lstNmElmntLst.item(0);
                 NodeList lstNm = lstNmElmnt.getChildNodes();
                 sb.append("Last Name : " + ((Node) lstNm.item(0)).getNodeValue() + "<br/>");
              }
           }
      } catch (Exception e) {
                             e.printStackTrace();
        }
      return sb.toString();
  }
}

Open in new window

0
Highfive + Dolby Voice = No More Audio Complaints!

Poor audio quality is one of the top reasons people don’t use video conferencing. Get the crispest, clearest audio powered by Dolby Voice in every meeting. Highfive and Dolby Voice deliver the best video conferencing and audio experience for every meeting and every room.

 

Author Comment

by:mesX
ID: 34138573
You're absolutely awesome!!!! THANK YOU VERY MUCH!

I just have a very small question:
What if i put the employee.xml directly under the WEB-INF folder? Or in my case /WEB-INF/configs/employee.xml? How can i access files inside the WEB-INF folder but outside the classes folder?


best regards
Manuel
0
 
LVL 27

Assisted Solution

by:rrz
rrz earned 500 total points
ID: 34138969
>How can i access files inside the WEB-INF folder but outside the classes folder?  
There are several ways. One simple way is pass the path from JSP to bean.
<jsp:useBean id="reader" class="rrz.XMLReader" />
<%
  String path = application.getRealPath("/WEB-INF/configs/employees.xml");
  reader.setPath(path);
%>
<%=reader.read()%>

Open in new window

 
and in source code  
File file = new File(path);
           DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
           DocumentBuilder db = dbf.newDocumentBuilder();
           Document doc = db.parse(file);

Open in new window

 

Better to solution at  previous discussion
0
 

Author Closing Comment

by:mesX
ID: 34139232
Thank you so much for all your help! You're a truly expert ;)

I hope you can help me in my future questions too (and i will surely have many  ;) )

best regards
Manuel
0

Featured Post

What Security Threats Are You Missing?

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

Join & Write a Comment

Author Note: Since this E-E article was originally written, years ago, formal testing has come into common use in the world of PHP.  PHPUnit (http://en.wikipedia.org/wiki/PHPUnit) and similar technologies have enjoyed wide adoption, making it possib…
Why do we like using grid based layouts in website design? Let's look at the live examples of websites and compare them to grid based WordPress themes.
This video teaches users how to migrate an existing Wordpress website to a new domain.
Any person in technology especially those working for big companies should at least know about the basics of web accessibility. Believe it or not there are even laws in place that require businesses to provide such means for the disabled and aging p…

758 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!

Get 1:1 Help Now