ola a todos, tenho uma aplicação java que acede aos metodos remotos de um webservice, esses metodos devolvem a informação em xml.
Result =
como posso capturar a altura?
ola a todos, tenho uma aplicação java que acede aos metodos remotos de um webservice, esses metodos devolvem a informação em xml.
Result =
como posso capturar a altura?
Dê uma estudada no framework JDOM http://jdom.org/
Usa o Xstream é bem mais facil de usar, ele faz o mapeamento direto para POJOs (JavaBeans), Listas:
http://xstream.codehaus.org/
segui um tutorial aqui do forum e fiz o seguinte:
import <a href="http://java.io">java.io</a>.<em>;
import <a href="http://java.net">java.net</a>.</em>;
import java.util.<em>;
import javax.xml.parsers.</em>;
import org.w3c.dom.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;
/**
*
*/
public class Main {
/** Creates a new instance of Main Xenon*/
public Main() {
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
try {
System.out.println("main programa");
LeXml();
} catch (Exception ex) {
// TODO handle custom exceptions here
}
}
//################################################################
private static void LeXml( ) throws SAXException, IOException
{
String pesoAtomico="";
try
{
// Call Web Service Operation
javaapplication15.Periodictable service = new javaapplication15.Periodictable();
javaapplication15.PeriodictableSoap port = service.getPeriodictableSoap();
// TODO initialize WS operation arguments here
java.lang.String elementName = "Xenon";
// TODO process result here
java.lang.String result = port.getAtomicWeight(elementName);
System.out.println("Peso = "+ result);
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(result);
Element elem = doc.getDocumentElement();
NodeList nl = elem.getElementsByTagName("Table");
for( int i=0; i<nl.getLength(); i++ )
{
Element tagTable = (Element) nl.item( i );
// pega os dados cadastrado para o usuario atual
pesoAtomico = getChildTagValue( tagTable, "Altura" );
}
}
catch(Exception ex)
{
}
}
//#################################################################
private static String getChildTagValue( Element elem, String tagName )
{
NodeList children = elem.getElementsByTagName( tagName );
if( children == null ) return null;
Element child = (Element) children.item(0);
if( child == null ) return null;
return child.getFirstChild().getNodeValue();
}
//################################################################
}
do webservice retorna um xml com a seguinte estrutura
tentei correr coloquei um system.out.println() e o problema parece estar nas seguintes linhas de codigo:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(result);
agradecia a vossa ajuda.
o erro é na instruçao :
Document doc = db.parse(result);
volto a referir que eu nao leio o conteudo de um ficheiro xml, em result tenho o que é retornado de um a chamada a um metodo remoto de um webservice.
será que ninguem me pode ajudar?
Acho que ninguem vai ficar lendo o seu codigo (ainda mais fora da tag CODE) e tentar adivinhar o erro
Por favor, poste também qual exception ocorre. Alias, tente pesquisar antes sobre a Exception no google, provavelmente você irá encontrar a resposta para o seu problema
na instrução ->Document doc = db.parse(result); dá o seguinte erro:
A sintaxe do nome do ficheiro, do nome do directório ou do nome de volume é incorrecta
a variavel result nao tem o caminho para o ficheiro xml , mas sim o resultado de um webservice quem esta em formato xml mas esses dados são guardados numa variavel string result
tente usar o JDOM, ele pode fazer o parse de uma variavel String
Uma outra alternativa é utilizar o JAXB. =)