Buscar
Social
Ofertas laborales ES

Foro sobre Java EE > Eclipse, Axis2 1.4, WSDL

Hola a todos,

Primero mencionar que soy muy nuevo en esto...

Tengo que crear un cliente web, la condicionante es que el compilador tiene que ser Java 1.4, según lo que e leído por ahí la forma mas conveniente de hacerlo es con Axis2 1.4.1

Entendiendo esto me han pasado un WSDL para crear el cliente el tema es que me lo pasaron junto con archivos xsd y un dtd (todo por separado).

Mi pregunta es:

-Como creo el cliente en Eclipse considerando los 3 archivos?
Actualmente genero el cliente solo con el WSDL y me crea los metodos pero no los datos y tipos de datos
-Como puedo ver los XML de petición y respuesta? para saber si lo que estoy preguntando y me están respondiendo esta en el formato correspondiente?
-Cada nodo de respuesta se puede almacenar en variables?

Quizá son preguntas básicas pero de veras espero me puedan ayudar, gracias!!

febrero 20, 2015 | Registered Commenterjaguargorgone

Para ver si te vale sólo con el WSDL simplemente te puede valer con usar

http://www.soapui.org/

descargalo e instalalo y si creas un nuevo proyecto y le adjuntas la WSDL te generará un objeto con las operaciones. Si no falla esto es que todo ha ido bien, si todo va bien sólo te hace falta el WSDL, resto no hace falta.

Además si despliegas la operación y creas una request verás cuales son los parámetros de entrada de cada una de las operaciones. Podrías rellenarla y lanzarla si tienes acceso al endpoint que es la URL que se sale en la ventana de la request.

Si ha dado error al pasarle el WSDL pon el error que te dá y si puedes publicar el WSDL mejor.

Bueno con esto verás si el WSDL te vale para generar el cliente, porque SoapUI básicamente lo que hace es genear un cliente.

GENERAR EL CLIENTE:

Dos opciones:

1- Con SoapUI si pinchas el ratón con botón derecho sobre tu servicio hay una opcion que pone generate code y te dará a elegir entre la cantidad de opciones que tienes para generar clientes, la tuya es Axis 2 artifacts. Te dará una serie de opciones como el directorio donde dejar el jar, el páquete base con el que va a generar las clases "com.mycompany" y el framework de databinding que básicamente es con que tipo de clases te va a generar el jar. Lo normal es crearlo con xmlBeans o ADB.

OJO tendrás que pulsar el botón tools para abrir la ventana de configuracion y en el apartado tools-->Axis2 seleccionar el directorio donde has descargado tu axis2.

Una vez hecho esto le das a generate y te generará las clases .java fuente y los .xsb asociados que tienes que compliar y que puedes meter en tu proyecto para usar el cliente y llamar al servicio.

2 - Esto que te hace soapUi automáticamente si quieres ver como se hace te recomiendo que te leas las documentación de axis2 al respecto. Con la quick start guide te vale. Elige el framework de generación del cliente ABD - XMLBeans y hazlo pasa a paso, te dirá como generar lo y como usar el cliente.

http://axis.apache.org/axis2/java/core/docs/quickstartguide.html


Saludo

febrero 20, 2015 | Registered Commenterantuansoft

Muchas gracias Antuan,

este es el WSDL, lo modifique pero solo los datos no la estructura, por que no conozco las politicas del sitio:

<?xml version='1.0' encoding='UTF-8'?><wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" name="SomeProjectSOAPService" targetNamespace="http://soap.api.someproject.cl/">
<wsdl:types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="" elementFormDefault="unqualified" targetNamespace="http://soap.api.someproject.cl/" version="1.0">

<xs:element name="some" type="tns:some"/>

<xs:element name="someResponse" type="tns:someResponse"/>

<xs:complexType name="some">
<xs:sequence>
<xs:element minOccurs="0" name="arg0" type="xs:string"/>"aqui deberia ir el parametro de entrada (solicitar) el cual es un string que deberia tener varios elementos; nombre, rut, telefono, empresa el cual esta en un xsd"
</xs:sequence>
</xs:complexType>

<xs:complexType name="someResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="xs:string"/>"aqui deberia ir el parametro de salida (solicitar) el cual es un string que deberia tener varios elementos; nombre, rut, telefono, empresa el cual esta en un xsd""
</xs:sequence>
</xs:complexType>
</xs:schema>

</wsdl:types>
<wsdl:message name="some">
<wsdl:part element="tns:some" name="parameters"></wsdl:part>
</wsdl:message>

<wsdl:message name="someResponse">
<wsdl:part element="tns:someResponse" name="parameters"></wsdl:part>
</wsdl:message>

<wsdl:portType name="SomeProjectSOAP">
<wsdl:operation name="some">
<wsdl:input message="tns:some" name="some">
</wsdl:input>
<wsdl:output message="tns:someResponse" name="someResponse">
</wsdl:output>
</wsdl:operation>

<wsdl:binding name="SomeProjectSOAPServiceSoapBinding" type="tns:SomeProjectSOAP">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="some">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="some">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="someResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="SomeProject">
<wsdl:port binding="tns:SomeProjectSOAPServiceSoapBinding" name="SomeProjectSOAPImplPort">
<soap:address location="http://127.0.0.1:8080/someproject/soap"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

febrero 20, 2015 | Unregistered CommenterJaguarGorgone

Muchas gracias Antuan,

este es el WSDL, lo modifique pero solo los datos no la estructura, por que no conozco las politicas del sitio:

<?xml version='1.0' encoding='UTF-8'?><wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" name="SomeProjectSOAPService" targetNamespace="http://soap.api.someproject.cl/">
<wsdl:types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="" elementFormDefault="unqualified" targetNamespace="http://soap.api.someproject.cl/" version="1.0">

<xs:element name="some" type="tns:some"/>

<xs:element name="someResponse" type="tns:someResponse"/>

<xs:complexType name="some">
<xs:sequence>
<xs:element minOccurs="0" name="arg0" type="xs:string"/>"aqui deberia ir el parametro de entrada (solicitar) el cual es un string que deberia tener varios elementos; nombre, rut, telefono, empresa el cual esta en un xsd"
</xs:sequence>
</xs:complexType>

<xs:complexType name="someResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="xs:string"/>"aqui deberia ir el parametro de salida (solicitar) el cual es un string que deberia tener varios elementos; nombre, rut, telefono, empresa el cual esta en un xsd""
</xs:sequence>
</xs:complexType>
</xs:schema>

</wsdl:types>
<wsdl:message name="some">
<wsdl:part element="tns:some" name="parameters"></wsdl:part>
</wsdl:message>

<wsdl:message name="someResponse">
<wsdl:part element="tns:someResponse" name="parameters"></wsdl:part>
</wsdl:message>

<wsdl:portType name="SomeProjectSOAP">
<wsdl:operation name="some">
<wsdl:input message="tns:some" name="some">
</wsdl:input>
<wsdl:output message="tns:someResponse" name="someResponse">
</wsdl:output>
</wsdl:operation>

<wsdl:binding name="SomeProjectSOAPServiceSoapBinding" type="tns:SomeProjectSOAP">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="some">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="some">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="someResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="SomeProject">
<wsdl:port binding="tns:SomeProjectSOAPServiceSoapBinding" name="SomeProjectSOAPImplPort">
<soap:address location="http://127.0.0.1:8080/someproject/soap"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>


Ojala me puedas orientar!!!

febrero 20, 2015 | Unregistered CommenterJaguarGorgone

Hola JaguarGorgone.

Hay una opcion que puedes intentar. Es consumir el servicio como lo hacian nuestros ancestros :

http://techdive.in/web-service/saaj-web-service-soap-client

Con este metodo puedes consumir cualquier servicio web sin necesidad de una libreria externa (purito java)

La opcion de soapui es genial pero tiene un problema. SoapUI constantemente se actualiza. Por lo que necesita siempre la ultima version de las librerias (axis, jaxws, etc) o las versiones mas estables. No he probado, pero no creo que te acepte una version de axis para java 1.4. Es muy antiguo.

Si necesitas ayuda con este metodo no dudes en consultarlo. En la noche estare compartiendo codigo de este metodo.

Saludos.

febrero 20, 2015 | Unregistered CommenterJRichardsz

Muchas gracias JRichardsz.

Si utilice este código al principio y me dijeron que no que los primeros servicios estaban construidos de esa manera, querían una forma mas automática y que lo ideal seria que ocupara axis que es lo que habían ocupado anteriormente, mira mi cuello de botella es el como hacer que el WIZARD de eclipse cree las clases de forma automática usando el .wsdl y el .xsd

Si sabes algo de como hacer eso te lo agradecería un montón!

febrero 20, 2015 | Unregistered CommenterJaguarGorgone

Hola.

Prueba este metodo y si hay error al generar el cliente con axis 1.x nos adjuntas el error.

http://chrisjordan.ca/post/15052416297/how-to-build-an-axis-1-4-xml-rpc-based-web-service

Saludos.

febrero 20, 2015 | Registered Commenterjrichard

Hola Jaguar,

Yo no uso eclipse para crear los clientes porque no me gusta que la generación de mi código depende de un IDE, prefiero usar scripts de maven o ant como cuenta en la documentación de Axis2 que te he puesto.

De todas maneras si el WSDL es correcto, debe poder generarte los cliente con soapui, como con los scripts y con el eclipse también.

Para empezar el WSDL que nos has puesto no está bien formado me da el siguiente error:

"error on line 56 at column 20: Opening and ending tag mismatch: portType line 0 and definitions"

Parace que te falta cerrar algún <wsdl:portType> por algún sitio.

Después lo he cerrado añadiendo </wsdl:portType> debajo de </wsdl:operation> y me ha dado el siguiente error:

"Prefix can't be mapped to no namespace: tns"

O sea que en la definicions de los namespaces el de tns no está definido. Efectivamente si vuelvo a mirar el WSDL veo:

xmlns:tns="" en un par de sitios de tu WSDL.

Me parece que tu WSDL no está correcto.

Danos más información, que has intentado hacer tú, que errores te está dando porque tu WSDL no funciona, has probado lo del SoaupUI, te has leido la documentación de Axis2.

Sino más yo no puedo hacer.

Saludos.

febrero 23, 2015 | Registered Commenterantuansoft

Gracias antuansoft, Gracias a todos,

Esta semana actualizaron los servidores así que estoy probando con jaxb y aprendiendo a como generar cliente.

Muchas gracias por su tiempo y paciencia!

Ahora estoy atrapado en que genero el XML con JAXBContext pero no se como incluir dicho XML que genero en la petición, si me puede ayudar con eso seria de mucha ayuda.

Espero me puedan entender.

febrero 24, 2015 | Unregistered CommenterJaguarGorgone