JAX-WS - Dúvida no WSDL gerado

2 respostas
warley

Olá a todos…

Pessoal gerei uns webservices com o JAX-WS e fiquei meio encucado com o WSDL que ele gera.

Eu criei o seguinte serviço:

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;

@WebService
public class ManterPessoaWS {
	
	@WebMethod
	public String obterNome(){
		return "Warley Rocha Mendes";
	}
	
	@WebMethod
	public Pessoa obterPessoa(){
		Pessoa p = new Pessoa();
		p.setNome("Marta Linda");
		p.setEmail("[email removido]");
		
		return p;
		
	}
	
	@WebMethod
	public void cadastrarPessoa(@WebParam(name="pessoa") Pessoa pessoa){
		System.out.println("Nome: "+ pessoa.getNome());
		System.out.println("Email: "+ pessoa.getEmail());
	}	
}

Os métodos obterPessoa e cadastrarPessoa estão trabalhando com o objeto pessoa que tem apenas os atributos nome e email.
A minha dúvida é que no WSDL gerado não possui o mapeamento do ojeto pessoa. Algo como:

<complexType name="Pessoa">
                <sequence>
                    <element name="nome" type="string" nillable="true"/>
                    <element name="sobreNome" type="string" nillable="true"/>
                </sequence>
            </complexType>

Veja o WSDL gerado pelos serviços da minha classe ManterPessoaWS:

<?xml version="1.0" encoding="UTF-8" ?> 
- <!--  Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.7-b01-. 
  --> 
- <!--  Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.7-b01-. 
  --> 
- <definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://teste/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://teste/" name="ManterPessoaWSService">
- <types>
- <xsd:schema>
  <xsd:import namespace="http://teste/" schemaLocation="http://localhost:8080/teste?xsd=1" /> 
  </xsd:schema>
  </types>
- <message name="obterNome">
  <part name="parameters" element="tns:obterNome" /> 
  </message>
- <message name="obterNomeResponse">
  <part name="parameters" element="tns:obterNomeResponse" /> 
  </message>
- <message name="obterPessoa">
  <part name="parameters" element="tns:obterPessoa" /> 
  </message>
- <message name="obterPessoaResponse">
  <part name="parameters" element="tns:obterPessoaResponse" /> 
  </message>
- <message name="cadastrarPessoa">
  <part name="parameters" element="tns:cadastrarPessoa" /> 
  </message>
- <message name="cadastrarPessoaResponse">
  <part name="parameters" element="tns:cadastrarPessoaResponse" /> 
  </message>
- <portType name="ManterPessoaWS">
- <operation name="obterNome">
  <input message="tns:obterNome" /> 
  <output message="tns:obterNomeResponse" /> 
  </operation>
- <operation name="obterPessoa">
  <input message="tns:obterPessoa" /> 
  <output message="tns:obterPessoaResponse" /> 
  </operation>
- <operation name="cadastrarPessoa">
  <input message="tns:cadastrarPessoa" /> 
  <output message="tns:cadastrarPessoaResponse" /> 
  </operation>
  </portType>
- <binding name="ManterPessoaWSPortBinding" type="tns:ManterPessoaWS">
  <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" /> 
- <operation name="obterNome">
  <soap:operation soapAction="" /> 
- <input>
  <soap:body use="literal" /> 
  </input>
- <output>
  <soap:body use="literal" /> 
  </output>
  </operation>
- <operation name="obterPessoa">
  <soap:operation soapAction="" /> 
- <input>
  <soap:body use="literal" /> 
  </input>
- <output>
  <soap:body use="literal" /> 
  </output>
  </operation>
- <operation name="cadastrarPessoa">
  <soap:operation soapAction="" /> 
- <input>
  <soap:body use="literal" /> 
  </input>
- <output>
  <soap:body use="literal" /> 
  </output>
  </operation>
  </binding>
- <service name="ManterPessoaWSService">
- <port name="ManterPessoaWSPort" binding="tns:ManterPessoaWSPortBinding">
  <soap:address location="http://localhost:8080/teste" /> 
  </port>
  </service>
  </definitions>

Sem os mapeamentos uma outra tecnologia consegue consumir os webservices gerados com o JAX-WS sem os mapeamentos dos objetos?
Tem alguma formar de forçar o JAX-WS colocar estes mapeamentos?

Obrigado.

2 Respostas

jeangos

O Mapeamento esta declarado na linha 9 do seu wsdl através da tag import:

  1. <xsd:import namespace=“http://teste/” schemaLocation=“http://localhost:8080/teste?xsd=1” />

Coloca isso no browse que voce vai ver o mapeamento das suas classes: http://localhost:8080/teste?xsd=1

Isso aconteceu porque voce deve ter usado o glassfish, no JBoss a classe é mapeada no prórpio wsdl, sem importação.

Espero ter ajudado!

P

Fala jeangos,
Acabei de abrir um tópico justamente sobre isso:

http://www.guj.com.br/java/233245-jax-ws-xsdimport#1200298

Existe alguma forma forçar com que o xsd fique dentro do wsdl?

valeu

Criado 4 de março de 2010
Ultima resposta 15 de fev. de 2011
Respostas 2
Participantes 3