Jump to content

[Resolvido] Ler apenas uma tag xml


JoaoVM
 Share

Recommended Posts

Boas pessoal,

Tenho aqui uma dúvida, é o seguinte.

Tenho um web service que se vai ligar a uma base de dados, essa base de dados tem password e utilizador e ip naturalmente.

o que se segue é que não quero e não posso colocar os dados no web service, a solução é criar um ficheiro xml com as tags e que possam ser alteradas e o web service continuar a funcionar corretamente.

<authentication>
<user>user</user>
<passwd>password</passwd>
<environment>1.1.1.1</environment>
</authentication>

Até aqui tudo bem.

O que queria era passar cada uma das tags <user>user</user>....para respetivas variáveis que serão utilizadas no código java em vez de colocar diretamente no código.

Alguém me sabe explicar?

Link to comment
Share on other sites

Este código deve ler o XML que pretendes.

import java.io.File;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class XMLLoader {
   public static final String XML_TAG_AUTHENTICATION = "authentication";
   public static final String XML_TAG_USER = "user";
   public static final String XML_TAG_PASSWORD = "passwd";
   public static final String XML_TAG_ENVIRONMENT = "environment";

   public static String user;
   public static String password;
   public static String environment;

   public static void Load(File file) throws ParserConfigurationException, SAXException, IOException {
    DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
    Document doc = docBuilder.parse(file);
    doc.getDocumentElement().normalize();
    NodeList database_nodes = doc.getElementsByTagName(XML_TAG_AUTHENTICATION);
    for (int tag = 0; tag < database_nodes.getLength(); tag++) {
	    Node node = database_nodes.item(tag);
	    if (node.getNodeType() == Node.ELEMENT_NODE) {
		    Element element = (Element) node;
		    NodeList userNodes = element.getElementsByTagName(XML_TAG_USER);
		    Element userEle = (Element) userNodes.item(0);
		    NodeList userValue = userEle.getChildNodes();
		    user = ((Node) userValue.item(0)).getNodeValue().trim();
		    NodeList passwordNodes = element.getElementsByTagName(XML_TAG_PASSWORD);
		    Element passwordEle = (Element) passwordNodes.item(0);
		    NodeList passwordValue = passwordEle.getChildNodes();
		    password = (((Node) passwordValue.item(0)).getNodeValue().trim());
		    NodeList environmentNodes = element.getElementsByTagName(XML_TAG_ENVIRONMENT);
		    Element environmentEle = (Element) environmentNodes.item(0);
		    NodeList environmentValue = environmentEle.getChildNodes();
		    environment = (((Node) environmentValue.item(0)).getNodeValue().trim());
	    }
    }
   }
}
  • Vote 1

The worst part of censorship is ****

Link to comment
Share on other sites

Saca rolhas é preciso tudo isto?

não será mais assim?digo eu, aproveitando a boleia do Baderous.

try{

 File file = new File("http://1.1.1.1/authentication.xml");

JAXBContext jaxbContext = JAXBContext.newInstance(AUTHENTICATION.class);

Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();

 AUTHENTICATION USERID = (AUTHENTICATION) jaxbUnmarshaller.unmarshal(file);
 String userid = (USERID.getUSERID());

 AUTHENTICATION PASSWD = (AUTHENTICATION) jaxbUnmarshaller.unmarshal(file);
 String passwd = (PASSWD.getPASSWD());

  AUTHENTICATION ENVIRONMENT = (AUTHENTICATION) jaxbUnmarshaller.unmarshal(file);
  String environment = (ENVIRONMENT.getENVIRONMENT());


  }catch (JAXBException e) {
 e.printStackTrace();
	  }



Edited by JoaoVM
Link to comment
Share on other sites

try {

 try
	{
	 File file = new File("http://11.1.1.1/WebService_XML/authentication.xml");
	 JAXBContext jaxbContext = JAXBContext.newInstance(AUTHENTICATION.class);

	 Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();

	 AUTHENTICATION Authentication = (AUTHENTICATION) jaxbUnmarshaller.unmarshal(file);

	 String userid = Authentication.getUSERID(); --->NAO RECEBE NADA
	 String passwd = Authentication.getPASSWD(); --->NAO RECEBE NADA
	 String environment = Authentication.getENVIRONMENT();--->NAO RECEBE NADA

	}catch(JAXBException e) {
	 e.printStackTrace();
			  }

		String URL = "jdbc:as400://"+environment+":50000/EWSMST00";
	   connection = DriverManager.getConnection(URL, userid, passwd);
} catch (SQLException e) {
		System.out.println("Connection Failed! Check output console");
		e.printStackTrace();

}
Edited by JoaoVM
Link to comment
Share on other sites

Saca rolhas é preciso tudo isto?

não será mais assim?digo eu, aproveitando a boleia do Baderous.

try{

 File file = new File("http://1.1.1.1/authentication.xml");

JAXBContext jaxbContext = JAXBContext.newInstance(AUTHENTICATION.class);

Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();

 AUTHENTICATION USERID = (AUTHENTICATION) jaxbUnmarshaller.unmarshal(file);
 String userid = (USERID.getUSERID());

 AUTHENTICATION PASSWD = (AUTHENTICATION) jaxbUnmarshaller.unmarshal(file);
 String passwd = (PASSWD.getPASSWD());

  AUTHENTICATION ENVIRONMENT = (AUTHENTICATION) jaxbUnmarshaller.unmarshal(file);
  String environment = (ENVIRONMENT.getENVIRONMENT());


  }catch (JAXBException e) {
 e.printStackTrace();
	  }



Isto é recorrendo a bibliotecas já presentes no java/Java EE (javax.xml.* e org.w3c.dom.*).

Tenho usado este método para a leitura de todos os ficheiros XML dos meus programas.

The worst part of censorship is ****

Link to comment
Share on other sites

Este código deve ler o XML que pretendes.

import java.io.File;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class XMLLoader {
public static final String XML_TAG_AUTHENTICATION = "authentication";
public static final String XML_TAG_USER = "user";
public static final String XML_TAG_PASSWORD = "passwd";
public static final String XML_TAG_ENVIRONMENT = "environment";

public static String user;
public static String password;
public static String environment;

public static void Load(File file) throws ParserConfigurationException, SAXException, IOException {
	DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
	DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
	Document doc = docBuilder.parse(file);
	doc.getDocumentElement().normalize();
	NodeList database_nodes = doc.getElementsByTagName(XML_TAG_AUTHENTICATION);
	for (int tag = 0; tag < database_nodes.getLength(); tag++) {
		Node node = database_nodes.item(tag);
		if (node.getNodeType() == Node.ELEMENT_NODE) {
			Element element = (Element) node;
			NodeList userNodes = element.getElementsByTagName(XML_TAG_USER);
			Element userEle = (Element) userNodes.item(0);
			NodeList userValue = userEle.getChildNodes();
			user = ((Node) userValue.item(0)).getNodeValue().trim();
			NodeList passwordNodes = element.getElementsByTagName(XML_TAG_PASSWORD);
			Element passwordEle = (Element) passwordNodes.item(0);
			NodeList passwordValue = passwordEle.getChildNodes();
			password = (((Node) passwordValue.item(0)).getNodeValue().trim());
			NodeList environmentNodes = element.getElementsByTagName(XML_TAG_ENVIRONMENT);
			Element environmentEle = (Element) environmentNodes.item(0);
			NodeList environmentValue = environmentEle.getChildNodes();
			environment = (((Node) environmentValue.item(0)).getNodeValue().trim());
		}
	}
}
}

Fiz como disseste então, e depois na página onde vai receber as variáveis coloquei assim:

private String userid = XMLLoader.userid;
   private String passwd = XMLLoader.passwd;
   private String environment = XMLLoader.environment;

é isto?

Link to comment
Share on other sites

Afinal não funciona.. Não percebo porque.. Estava a dar mas porque o web service não foi invocado e o ficheiro XML era o anterior.

Anterior, como assim?

Atenção que eu moldei o método para receber um objecto do tipo java.io.File e para correres isto:

File file = new File("http://1.1.1.1/authentication.xml");

A maquina que vai correr o código tem de ter acesso de leitura ao ficheiro que estás a colocar no exemplo que me deste, se vais buscar isso através de uma aplicação servidor na rede deves apanhar um FOS (FileOutputStream) e converter para file.

Testa o método metendo-o a ler um ficheiro local e vais verificar que vai funcionar e colocar os valores do XML nas variáveis e assim determinas que o problema está em fazer chegar a informação ao metodo.

The worst part of censorship is ****

Link to comment
Share on other sites

Anterior porque o web service cria um ficheiro, e esse ficheiro é substituído quando criado um novo, e como não foi criado um novo o C# leu o ficheiro anterior por isso pensei que funcionou e afinal não.

hum..pois deve ser esse o problema então para não conseguir identificar os valores das tags, vou verificar se a maquina que invoca o web service tem acesso de leitura, porque invoco o web service através de uma pistola com windows phone, e vai criar ficheiros xml que tem dados de uma consulta..mas como nunca tinha lido não tinha tido este problema.

Edited by JoaoVM
Link to comment
Share on other sites

Porra não estou mesmo a perceber...

Este é o metodo onde chamo o web service, se conseguires ver alguma coisa que não estou a conseguir ver agradecia, porque apenas se alterar as variáveis onde tem o XMLLoader para os valores da autenticação ele já funciona.

.
.
.
.
try{
	   XMLLoader.Load(new File("http://1.1.1.1:8080/WebService_XML/authentication_sql_server.xml"));
    }catch (ParserConfigurationException ex) {
	    Logger.getLogger(WorkersUpdateConsumosArmazem.class.getName()).log(Level.SEVERE, null, ex);
    } catch (SAXException ex) {
	    Logger.getLogger(WorkersUpdateConsumosArmazem.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException ex) {
	    Logger.getLogger(WorkersUpdateConsumosArmazem.class.getName()).log(Level.SEVERE, null, ex);
    }

.
.
.
String connectionUrl = "jdbc:sqlserver://"+XMLLoader.environment+":1433;" + "databaseName="+XMLLoader.database+";" + "user="+XMLLoader.userid+";" + "password="+XMLLoader.passwd+";";

public class XMLLoader {
   public static final String XML_TAG_AUTHENTICATION = "AUTHENTICATION";
   public static final String XML_TAG_USERID = "USERID";
   public static final String XML_TAG_PASSWD = "PASSWD";
   public static final String XML_TAG_DATABASE = "DATABASE";
   public static final String XML_TAG_ENVIRONMENT = "ENVIRONMENT";

   public static String userid;
   public static String passwd;
   public static String database;
   public static String environment;
   public static void Load(File file) throws ParserConfigurationException, SAXException, IOException {
	    DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
	    DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
	    Document doc = docBuilder.parse(file);
	    doc.getDocumentElement().normalize();
	    NodeList database_nodes = doc.getElementsByTagName(XML_TAG_AUTHENTICATION);
	    for (int tag = 0; tag < database_nodes.getLength(); tag++) {
			    Node node = database_nodes.item(tag);
			    if (node.getNodeType() == Node.ELEMENT_NODE) {
					    Element element = (Element) node;
					    NodeList userNodes = element.getElementsByTagName(XML_TAG_USERID);
					    Element userEle = (Element) userNodes.item(0);
					    NodeList userValue = userEle.getChildNodes();
					    userid = ((Node) userValue.item(0)).getNodeValue().trim();
					    NodeList passwordNodes = element.getElementsByTagName(XML_TAG_PASSWD);
					    Element passwordEle = (Element) passwordNodes.item(0);
					    NodeList passwordValue = passwordEle.getChildNodes();
					    passwd = (((Node) passwordValue.item(0)).getNodeValue().trim());
					    NodeList databaseNodes = element.getElementsByTagName(XML_TAG_DATABASE);
					    Element databaseEle = (Element) databaseNodes.item(0);
					    NodeList databaseValue = databaseEle.getChildNodes();
					    database = (((Node) databaseValue.item(0)).getNodeValue().trim());
					    NodeList environmentNodes = element.getElementsByTagName(XML_TAG_ENVIRONMENT);
					    Element environmentEle = (Element) environmentNodes.item(0);
					    NodeList environmentValue = environmentEle.getChildNodes();
					    environment = (((Node) environmentValue.item(0)).getNodeValue().trim());
			    }
	    }
   }
}
Link to comment
Share on other sites

Depois de verificar os logs ponto a ponto verifiquei que ele não encontrava o ficheiro, troquei

isto

XMLLoader.Load(new File("http://1.1.1.1:8080/WebService_XML/authentication_sql_server.xml"));

por isto

XMLLoader.Load(new File("/etc/apache-tomcat-7.0.55/webapps/ROOT/WebService_XML/authentication_sql_server.xml"));

e funcionou 😉

Obrigado pela paciência e pelo exemplo 😉

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.