Web Service .NET acessado por Java e SOA [RESOLVIDO]

4 respostas
PadrE

Galera...

Procurei muuuito e ainda não consegui o que quero =/
Ainda estou lendo... testando e tentando.. mas ta dificil... cheguei em um ponto te ter muitos caminhos para seguir... muitas bibliotecas para baixar que estou achando que vou pegar o caminho errado.. então acho melhor ter uma ajuda ou mesmo uma indicação de vocês...

Os post's que já li:

http://www.guj.com.br/posts/list/135/72325.java#700239

http://www.guj.com.br/posts/list/0/81068.java#701040

http://blogs.mentaframework.org/posts/list/14404.page

http://xstream.codehaus.org/tutorial.html

http://www.netbeans.org/kb/docs/websvc/gs-axis_pt_BR.html#install_apache

Meu ambiente é o seguinte... tenho um WebService escrito em .NET com um método de HelloWorld que ao acessar pelo browser ele me dá o seguinte WSDL (agora que vi.. esse não eh mesmo o WSDL... =/ abri um WSDL aki e vi que as tags são diferentes):

SOAP 1.2
The following is a sample SOAP 1.2 request and response. The placeholders shown need to be replaced with actual values.

POST /NF-e/NF-e.asmx HTTP/1.1
Host: mw-112
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <HelloWorld xmlns="http://meusite.com.br/" />
  </soap12:Body>
</soap12:Envelope>
HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <HelloWorldResponse xmlns="http://meusite.com.br/">
      <HelloWorldResult>string</HelloWorldResult>
    </HelloWorldResponse>
  </soap12:Body>
</soap12:Envelope>

Como desenvolvimento to usando o eclipse 3.4 com os plugis para desenvolvimento web... e vou começar um novo projeto (precisa ser algum projeto especifico do eclipse ???)... pois o outro ja ficou meio bagunçado.. ^^

De bibliotecas extras baixei a xstream-distribution-1.3.1-bin.zip.

Agora estou com duvidas sobre as outras bibliotecas... as que preciso para trabalhar com SAAJ e Axis2... porque não achei um pacote, algo do tipo... lib/*.jar como as que veem do XSTream... no final acabei baixando biblioteca a biblioteca pelo site [url]http://www.java2s.com/Code/Jar/Web-Services-AXIS2/CatalogWeb-Services-AXIS2.htm[/url], que foi onde comecei a me atrapalhar, pq acho que deu conflito no projeto...

Bom... meus próximos passos serão criar um projeto e adicionar as bibliotecas e tentar chamar esse método do WebService...

Para isso vou procurar seguir o tutorial da própria sun sobre JEE. (que vem com o download).

Acredito que terei problemas ao improtar as bibliotecas.. algums dica ?

vlw

4 Respostas

PadrE

Bom.. atpe aki esta dando certo...

No projeto apenas usei as bibliotecas do JDK1.6 e todas as classes do exemplo estão ok.

Segue o fonte para tentar chamar o HelloWorld do WSDL:

import java.net.MalformedURLException;
import java.net.URL;
import java.util.Iterator;

import javax.xml.namespace.QName;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPBodyElement;
import javax.xml.soap.SOAPConnection;
import javax.xml.soap.SOAPConnectionFactory;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPMessage;

public class CopyOfSOAHelloWorld {

	public static void main(String[] args) {
		
		try{
			// 1 Criar a Mensagem com o protocolo desejado
			MessageFactory factory = MessageFactory.newInstance();
			SOAPMessage message = factory.createMessage();

			// 2 obter as partes do envelope
			SOAPHeader header = message.getSOAPHeader();
			SOAPBody body = message.getSOAPBody();
			
			header.detachNode(); // elima o cabecalho, caso nao va utiliza-lo
			
			// 3 montar o corpo com os elementos desejados (metodos do WS a serem chamados)
			//HelloWorld no meu exemplo
			QName bodyName = new QName("http://MeuWebService.NET/Metodos.asmx", "HelloWorld", "m");
			SOAPBodyElement bodyElement = body.addBodyElement(bodyName);
			
			SOAPElement symbol = bodyElement.addChildElement(new QName("symbol"));
			symbol.addTextNode("HW");
			
			// 4 Montar a conexão com o WS
			SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
			SOAPConnection connection = soapConnectionFactory.createConnection();
			URL url = new URL("http://MeuWebService.NET/Metodos.asmx");
			SOAPMessage response = connection.call(message, url);
			
			// 5 Pegar o retorno da chamada
			SOAPBody soapBody = response.getSOAPBody();
			Iterator iterator = soapBody.getChildElements(bodyName);
			SOAPBodyElement repsonseElement = (SOAPBodyElement)iterator.next();  // ERRO AKI !!!
			String msg = repsonseElement.getValue();
			
			System.out.println(msg);
			
		}catch(SOAPException e){
			e.printStackTrace();
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}
	}

}

E o erro ate o momento, na hora de tentar recuperar o retorno do método, esse exemplo montei com ajuda do tutorial, vou analizar com calma para resolver.. mas se alguem ai ja matar de cara.. agradeço !!! =]

Exception in thread "main" java.util.NoSuchElementException
	at com.sun.xml.internal.messaging.saaj.soap.impl.ElementImpl$3.next(ElementImpl.java:764)
	at integrar.net.SOAHelloWorld.main(SOAHelloWorld.java:48)
PadrE

Bom… estou tentendo de outroa forma… com a ajuda do João

Parei no eclipse onde peço apra criar um novo WebService… ao informar o ServiceDefinition, coloco o endeço do WSDL… onde percebi que o XML na verdade eh algumas informações… e não realmente o meu arquivo WSDL… =/

Ou seja… ele me fala que o arquivo está inválido… Parece que terei que criar um WSDL para o meu metodo HelloWorld antes de fazer esse passo…

PadrE

Opa… eae…

Eh o seguinte… fiz um teste com o WebService usando .NET… (tive que usar a ferramenta da microsoft… =/)

Enfim… no projeto que criei consegui acessar os metodos do WebService… tudo no next - next - next…

No final vi que foi criado um arquivo WSDL que descreve todos os metodos do webservice… com Request e Response… Tentei usar esse mesmo WSDL pelo eclipse criando um projeto “WebService Client” e indicando o caminho do arquivo WSDL… mas n deu certo… disse que o arquivo eh invalido…

Com isso posso dizer que para cada linguagem o WSDL eh diferente ??

No momento estou instalando o plugin WSDL Extensions Generator no eclipse… dessa forma espero gerar o WSDL e em seguida criar a classe que irá consumir os metodos… Estou no caminho certo ?

Vlw !!


Opa… acho que mais um passo realizado…

Criei um “WebService Client” baseado no WSDL correto (Consegui usar o mesmo do .NET, estava errando no caminho, que não pode ser o o arquivo WSDL direto… precisa usar a URL).

Bom… agora meu projeto tem um monte de classes (6 ao todo) que ainda não sei como usar… ^^
mas imagino… pois tem Soap e Soap12 no nome… hehe

Espero estar indo pelo cominho certo… se eh o mais facil… nao sei ainda… hehe

Fui !

PadrE

Puts.. acho que consegui !!!

Se for isso mesmo.. que blza...

As classes que o WSDL2Java criou ficou lindo...

Depois que olhei os a estrutura das classes... so precisei digitar essas 3 linhas de codigo para testar meu metodo helloWorld..

public static void main(String[] args) throws RemoteException, ServiceException {
	MetodosWSLocator loc = new MetodosWSLocator();
	MetodosWSSoap soap12 = loc.getMetodosWSSoap12();
	
	System.out.println(soap12.helloWorld());
}

Funcionou numa boa... (ao menos para esse metodo basico) hehe

Ele importou biblioteca de tudo que eh lugar.. do TomCat, do JDK 1.5 (no meu caso) mais axis.jar, saaj.jar e wsdl4j.jar entre outras...

Tô vendo que vou ter um pouco de trabalho para jogar esse exemplo dentro da minha aplicação... =/

Bom galera... ngm comentou nada.. mas espero que tenham lido e que alguem venha a aprender algo com o post.. ^^
E se algo ai puder ser feito de outra forma.. por favor postem...

Ah.. outro link que me deu uma força.. [url]http://www.ibm.com/developerworks/br/library/ws-webaxis1/index.html[/url]

Se precisar de alguma força extra.. me manda MP...

Fui !

Criado 19 de junho de 2009
Ultima resposta 22 de jun. de 2009
Respostas 4
Participantes 1