Ler Soap Servidor Web [Resolvido]

5 respostas
V

Olá, estou com um problema que eu não estou conseguindo achar uma solução, eu tenho 1 classe com métodos para enviar mensagem SOAP, e o mesmo retorna a mensagem, e uma outra classe com métodos que a partir da resposta SOAP eu gero um HTML, eu rodando essas mesmas classes via a maquina virtual direto do meu pc roda tranquilo funciona tudo, mas quando coloco no servidor Web Jboss Portal, e o erro se da nessa linha da classe que gera o html

soap.getSOAPBody().getFirstChild().getFirstChild().getFirstChild().getTextContent();

e o erro é o seguinte

org.jboss.util.NotImplementedException getTextContent() method

agradeço desde já

5 Respostas

V

ou ate uma outra forma de ler a msg de retorno do Soap ja ajudaria muito

K

Vai lá Victor : http://blog.jdevelop.eu/2008/03/08/how-to-modify-jax-ws-soap-messages/

V

valeu cara, vou dar uma olhada.

V

Kenobi, não entendi muito bem o que o tutorial queria passar, admito inglês fraco, bom mas para deixar deixar mais claro o que estou precisando

esta é a minha classe que pega a mensagem soap e transforma em HTML
import java.io.IOException;
import java.io.OutputStream;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;

import org.jdom.*; 
import org.jdom.input.*; 
import org.jdom.output.*;


public class GeradorHTML {
	public GeradorHTML(){
	}
	public List<String> GeraPermissoes(SOAPMessage soap) throws SOAPException
	{
		List<String> retorno = new ArrayList<String>();
		String codigoP = "";
		String codigoNP = "";
		String nome = "";
		String Liberado = "";
		int cont = 0;
		String XMLr = "";
		
		//Obtendo a XML ******************************
		XMLr = soap.getSOAPBody().getTextContent();			
		SAXBuilder builder = new SAXBuilder();    
		org.jdom.Document d = null;
		try 
		{
			d =  builder.build(new StringReader(XMLr));
		} 
		catch (JDOMException e) 
		{
			e.printStackTrace();
		} 
		catch (IOException e) 
		{
			e.printStackTrace();
		}  
		//-----------------------------------------------
		//Recupera o elemento root  
		Element mural = (Element) d.getRootElement();  
		//Recupera os elementos filhos (children)  
		List elements = mural.getChildren();  
		Iterator i = elements.iterator();  
		//Itera com os elementos filhos, e filhos do dos filhos  e gera codigo
		while (i.hasNext()) 
		{  
			Element element = (Element) i.next();  
		    Liberado = element.getChildText("Liberado");
		    nome = element.getChildText("Nome");
		    if(Liberado.equals("1")){
		    	codigoP = codigoP.concat("<tr>\n\t<td>"+Integer.toString(cont)+"</td>\n\t<td>"+nome+"</td>\n\t<td><img src=\"<%=request.getContextPath()%>/x.png\" onclick=\"submitPermissoes('"+nome+"','0')\"></td>\n</tr>\n");
		    	 cont++;
		    }
		    else
		    {
		    	codigoNP = codigoNP.concat("\t<OPTION VALUE=\""+nome+"\">"+nome+"</OPTION>\n");
		    }	   
		}
		System.out.print(codigoP);
		retorno.add(codigoP);
		retorno.add(codigoNP);
		return retorno;
	}
XML que vem como parametro
<env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'>
	<env:Header></env:Header>
	<env:Body>
		<ns2:executeTabelaPermitidosResponse xmlns:ns2="http://xxx.xx.xx.xx/webservice_a/process">
			<return>
				&lt;TabelaPermitidos&gt;&lt;Usuario&gt;&lt;Nome&gt;a&lt;/Nome&gt;&lt;Liberado&gt;1&lt;/Liberado&gt;&lt;/Usuario&gt;
			</return>
		</ns2:executeTabelaPermitidosResponse>
	</env:Body>	
</env:Envelope>
ai se eu fizer um print no soap.getSOAPBody().getTextContent() me aparece esse xml
<TabelaPermitidos>
	<Usuario>
		<Nome>a</Nome>
		<Liberado>1</Liberado>
	</Usuario>	
<TabelaPermitidos>

ate ai tudo beleza, isto esta rodando bem na minha maquina, mas quando tento rodar no jboss portal aparece o erro que comentei, estou ficando doido atras da informação, o xml que eu preciso para fazer o html é o que vem do soap.getSOAPBody().getTextContent()

V
No lugar disso
//XMLr = soap.getSOAPBody().getTextContent();
fiz uma gambi e deu certo segue a gambiara
//<POG>****GABIARA BRAVA******************** Ultilizada pois não foi possivel ultilizar o comando soap.getSOAPBody().getTextContent()); no JBOSS
		SOAPBody body = soap.getSOAPBody();
		ByteArrayOutputStream out = new ByteArrayOutputStream();
		try{
			soap.writeTo(out);
		}catch (IOException e1) {
			e1.printStackTrace();
		}
		XMLr = out.toString();
		String[] domal;
		domal = XMLr.split("<return>");
		domal = domal[1].split("</return>");
		domal[0] = domal[0].replaceAll("&lt;" , "<");
		domal[0] = domal[0].replaceAll("&gt;" , ">");
		XMLr = domal[0];
		domal = null;
		//</POG>***************************************************************
Criado 27 de julho de 2010
Ultima resposta 27 de jul. de 2010
Respostas 5
Participantes 2