Foros del Web » Programación para mayores de 30 ;) » Java »

Consumir web service php con cliente JAVA

Estas en el tema de Consumir web service php con cliente JAVA en el foro de Java en Foros del Web. Hola: Soy novato en web service, pero logre que php consuma el web service del mismo php, pero, requiero que el web service lo consuma ...
  #1 (permalink)  
Antiguo 27/11/2014, 15:21
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 3 meses
Puntos: 12
Consumir web service php con cliente JAVA

Hola:

Soy novato en web service, pero logre que php consuma el web service del mismo php, pero, requiero que el web service lo consuma JAVA, y al crear el cliente web serice despues de editar el WSDL, no me muestra los metodos.

este mi WSDL

Código XML:
Ver original
  1. <?xml version="1.0"?>
  2. <definitions name="AritmeticaServicio"
  3.    targetNamespace="urn:Aritmetica"
  4.     xmlns:tns="urn:Aritmetica"
  5.     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  6.     xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
  7.     xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
  8.     xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
  9.     xmlns="http://schemas.xmlsoap.org/wsdl/">
  10.  
  11. <wsdl:types>
  12.     <xsd:element name="name1" type="s:string"/>
  13.     <xsd:element name="name2" type="s:string"/>
  14. </wsdl:types>
  15.  
  16.   <message name="AritmeticaPeticion">
  17.     <part name="name1" type="string" />
  18.   </message>
  19.  
  20.   <message name="AritmeticaRespuesta">
  21.     <part name="name2" type="string"/>
  22.   </message>
  23.  
  24.   <portType name="AritmeticaPort">
  25.     <operation name="pagos">
  26.       <input message="tns:AritmeticaPeticion" />
  27.       <output message="tns:AritmeticaRespuesta" />
  28.     </operation>    
  29.   </portType>
  30.  
  31.   <binding name="AritmeticaBinding" type="tns:AritmeticaPort">
  32.     <soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
  33.     <operation name="pagos">
  34.         <soap:operation soapAction="urn:Aritmetica" style="document"/>
  35.         <input>
  36.           <soap:body use="literal" namespace="urn:Aritmetica" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
  37.         </input>
  38.         <output>
  39.           <soap:body use="literal" namespace="urn:Aritmetica" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
  40.         </output>
  41.     </operation>
  42.   </binding>  
  43.     <service name="AritmeticaServicio">
  44.       <port name="AritmeticaPort" binding="tns:AritmeticaBinding">
  45.         <soap:address location="http://localhost:8081/server/aritmetica_server.php" />
  46.       </port>
  47.     </service>    
  48. </definitions>

y este los warning:
Código:
[WARNING] El atributo namespace de R2716 WSI-BasicProfile ver. 1.0 no está permitido en doc/lit para soapbind:body: \"pagos\"
  línea 36 de file:/D:/sistemas/iteam/db2_lv/lvWebSerice/xml-resources/web-service-references/aritmetica_server/wsdl/localhost_8081/server/aritmetica_server.php.wsdl

[WARNING] El atributo namespace de R2716 WSI-BasicProfile ver. 1.0 no está permitido en doc/lit para soapbind:body: \"pagos\"
  línea 39 de file:/D:/sistemas/iteam/db2_lv/lvWebSerice/xml-resources/web-service-references/aritmetica_server/wsdl/localhost_8081/server/aritmetica_server.php.wsdl

[WARNING] ignorando operación "pagos": la parte del mensaje no hace referencia a una declaración de elemento de esquema
  línea 25 de file:/D:/sistemas/iteam/db2_lv/lvWebSerice/xml-resources/web-service-references/aritmetica_server/wsdl/localhost_8081/server/aritmetica_server.php.wsdl

[WARNING] El puerto "AritmeticaPort" no contiene ninguna operación que se pueda utilizar
  línea 44 de file:/D:/sistemas/iteam/db2_lv/lvWebSerice/xml-resources/web-service-references/aritmetica_server/wsdl/localhost_8081/server/aritmetica_server.php.wsdl

[WARNING] El servicio \"AritmeticaServicio\" no contiene ningún puerto que se pueda utilizar. Pruebe a ejecutar wsimport con el conmutador -extension.
  línea 43 de file:/D:/sistemas/iteam/db2_lv/lvWebSerice/xml-resources/web-service-references/aritmetica_server/wsdl/localhost_8081/server/aritmetica_server.php.wsdl
  #2 (permalink)  
Antiguo 28/11/2014, 02:10
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Consumir web service php con cliente JAVA

Buenas,

Prueba a lanzar wsimport con el parametro -extension para que pueda utilizar extensiones fuera del estandar.


Un saludo
__________________
If to err is human, then programmers are the most human of us
  #3 (permalink)  
Antiguo 28/11/2014, 05:18
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Consumir web service php con cliente JAVA

Te está diciendo que ese wsdl no cumple con la especificación, es decir, aunque en PHP funcione no es correcto.

Puedes tratar de corregirlo directamente, o a partir de un xml de llamada crear tu propio wsdl/clases que sí cumpla y obtenga la misma llamada.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #4 (permalink)  
Antiguo 28/11/2014, 12:28
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 3 meses
Puntos: 12
Respuesta: Consumir web service php con cliente JAVA

gracias por su respuesta, pues intento hacer un xml que cumpla, me he descargado un ejemplo de w3c, pero me arroja otros errores, quisiera saber como lograr realizar un wsdl estándar para java. es decir usar las herramientas del mismo java para generar e wsdl, por favor verifiquen este wsdl que descargue de w3c:
Código XML:
Ver original
  1. <?xml version="1.0"?>
  2. <definitions name="StockQuote"
  3.  
  4. targetNamespace="urn:Aritmetica"
  5.          xmlns:tns="urn:Aritmetica"
  6.          xmlns:xsd1="http://www.w3.org/2001/XMLSchema"
  7.          xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
  8.          xmlns="http://schemas.xmlsoap.org/wsdl/">
  9.  
  10.     <types>
  11.        <schema targetNamespace="http://example.com/stockquote.xsd"
  12.              xmlns="http://www.w3.org/2000/10/XMLSchema">
  13.            <element name="TradePriceRequest">
  14.               <complexType>
  15.                   <all>
  16.                       <element name="tickerSymbol" type="string"/>
  17.                   </all>
  18.               </complexType>
  19.            </element>
  20.            <element name="TradePrice">
  21.               <complexType>
  22.                   <all>
  23.                       <element name="price" type="string"/>
  24.                   </all>
  25.               </complexType>
  26.            </element>
  27.        </schema>
  28.     </types>
  29.  
  30.     <message name="GetLastTradePriceInput">
  31.         <part name="body" element="xsd1:TradePriceRequest"/>
  32.     </message>
  33.  
  34.     <message name="GetLastTradePriceOutput">
  35.         <part name="body" element="xsd1:TradePrice"/>
  36.     </message>
  37.  
  38.     <portType name="StockQuotePortType">
  39.         <operation name="pagos">
  40.            <input message="tns:GetLastTradePriceInput"/>
  41.            <output message="tns:GetLastTradePriceOutput"/>
  42.         </operation>
  43.     </portType>
  44.  
  45.     <binding name="StockQuoteSoapBinding" type="tns:StockQuotePortType">
  46.         <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
  47.         <operation name="pagos">
  48.            <soap:operation soapAction="urn:Aritmetica"/>
  49.            <input>
  50.                <soap:body use="literal"/>
  51.            </input>
  52.            <output>
  53.                <soap:body use="literal"/>
  54.            </output>
  55.         </operation>
  56.     </binding>
  57.  
  58.     <service name="StockQuoteService">
  59.         <documentation>My first service</documentation>
  60.         <port name="StockQuotePort" binding="tns:StockQuoteSoapBinding">
  61.            <soap:address location="http://localhost:8081/server/aritmetica_server.php"/>
  62.         </port>
  63.     </service>
  64.  
  65. </definitions>
me arroja este error:
Cita:
Reason: No se ha definido el descriptor de esquema {http://www.w3.org/2001/XMLSchema}TradePriceRequest en la parte del mensaje \"body\" y no puede estar enlazada a java
existirá algún manual que me guie cómo hacer un wsdl para Java?

Quisiera por ejemplo me aclaren que debe ingresar en;

Cita:
targetNamespace="?"
Cita:
soapAction="?"

Última edición por wilmer30; 28/11/2014 a las 12:35
  #5 (permalink)  
Antiguo 28/11/2014, 13:08
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Consumir web service php con cliente JAVA

Para poder comprobar si está bien el wsdl lo primero es tener claro como es el xml de llamada que funciona en PHP.


Wsdl es un estándar, no hay un wsdl de java, lo que hay son distintas librerías que más o menos se adaptan al estándar, aunque esas diferencias aparecen en el código que se genera no en el mensaje xml, ya que este es el objetivo, tener un mensaje xml entendible por cualquier sistema.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #6 (permalink)  
Antiguo 28/11/2014, 13:34
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 3 meses
Puntos: 12
Respuesta: Consumir web service php con cliente JAVA

Me encuentro enredado con tu comentario ademas de frustrado por este problema que se me presentó.

Como todo novato, agarre los conceptos de webservice que dice que es un estandar para que diferentes sistemas puedan comunicarse entre si, al montar mi web service en php fue facil.

Pero cuando dices cómo es el xml de llamada que funciona en php, te refieres al wsdl que genero para su funcionamiento?

Inicialmente el protocolo que usaba en el WSDL era "rpc", pero por ahí leí que JAVA no soportaba este asi que lo cambié por "document" no se si te refieres a esto cuando dices " lo que hay son distintas librerías que más o menos se adaptan al estándar". El caso que me preocupa es que en los manuales no me dicen que librerías usar para crear un cliente JAVA que me consuma un web service PHP, es mas no vi ningún manual con dicho titulo.

imagino que entenderé cuando me haya leido y puesto en practica diferentes ejemplos de diferentes autores. pero creo que mi duda es clara.
  #7 (permalink)  
Antiguo 28/11/2014, 16:10
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 3 meses
Puntos: 12
Respuesta: Consumir web service php con cliente JAVA

Se me esta despejando un poco mas este tema, pues, he creado un web service sencillo desde netbeans y me ha jenerado el wsdl, mismo que al importarlo a otro proyecto funciona bien:
Código XML:
Ver original
  1. <?xml version='1.0' encoding='UTF-8'?>
  2. <definitions xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
  3.             xmlns:wsp="http://www.w3.org/ns/ws-policy"
  4.             xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy"
  5.             xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"
  6.             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
  7.             xmlns:tns="http://wil/"
  8.             xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  9.             xmlns="http://schemas.xmlsoap.org/wsdl/"
  10.             targetNamespace="http://wil/"
  11.             name="WebServicesss">
  12. <types>
  13. <xsd:schema>
  14. <xsd:import namespace="http://wil/" schemaLocation="http://localhost:8080/wilmers/WebServicesss?xsd=1"/>
  15. </xsd:schema>
  16. </types>
  17. <message name="hello">
  18. <part name="parameters" element="tns:hello"/>
  19. </message>
  20. <message name="helloResponse">
  21. <part name="parameters" element="tns:helloResponse"/>
  22. </message>
  23. <message name="operation">
  24. <part name="parameters" element="tns:operation"/>
  25. </message>
  26. <message name="operationResponse">
  27. <part name="parameters" element="tns:operationResponse"/>
  28. </message>
  29. <portType name="WebServicesss">
  30. <operation name="hello">
  31. <input wsam:Action="http://wil/WebServicesss/helloRequest" message="tns:hello"/>
  32. <output wsam:Action="http://wil/WebServicesss/helloResponse" message="tns:helloResponse"/>
  33. </operation>
  34. <operation name="operation">
  35. <input wsam:Action="http://wil/WebServicesss/operationRequest" message="tns:operation"/>
  36. <output wsam:Action="http://wil/WebServicesss/operationResponse" message="tns:operationResponse"/>
  37. </operation>
  38. </portType>
  39. <binding name="WebServicesssPortBinding" type="tns:WebServicesss">
  40. <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
  41. <operation name="hello">
  42. <soap:operation soapAction=""/>
  43. <input>
  44. <soap:body use="literal"/>
  45. </input>
  46. <output>
  47. <soap:body use="literal"/>
  48. </output>
  49. </operation>
  50. <operation name="operation">
  51. <soap:operation soapAction=""/>
  52. <input>
  53. <soap:body use="literal"/>
  54. </input>
  55. <output>
  56. <soap:body use="literal"/>
  57. </output>
  58. </operation>
  59. </binding>
  60. <service name="WebServicesss">
  61. <port name="WebServicesssPort" binding="tns:WebServicesssPortBinding">
  62. <soap:address location="http://localhost:8080/wilmers/WebServicesss"/>
  63. </port>
  64. </service>
  65. </definitions>
Pero el namespace='http://wil/', y "wil" es el nombre que yo le asigne al paquete, que coño hace en el namespace, en el manual lei que el namespace es el nombre de la ubicación del WSDL.

En php mi servicio web es "http://localhost:8081/server/aritmetica_serpver.php" cual sería mi name space?

tambien en las operaciones menciona
Código XML:
Ver original
  1. <input wsam:Action="http://wil/WebServicesss/helloRequest" message="tns:hello"/>
es una url que no lleva a ningun lado, es nesario esa ruta? que significa?

Si pueden ayudarme a aclarar esto les estaré muy agradecido.
Por favor
  #8 (permalink)  
Antiguo 28/11/2014, 16:39
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Consumir web service php con cliente JAVA

Un webservice con soap no es para ser accedido desde un navegador, el wsdl es accesible desde él por facilitar el uso del webservice, pero no es obligatorio. Al wsdl se le identifica con un contrato que impone qué tienen que hacer el cliente y el servidor.

Si lo que buscas es un eebservice accesible por web, entonces debes ver los Rest, que no tienen nada que ver con Soap o wsdl.

Un namespace no es más que un identificador, no tiene que ver con las url salvo que por convenio se suele utilizar su formato igual que sucede con los paquetes de java. Que uses una url no significa que exista, de hecho lo normal es que no.

¿Identificar el qué? Pues la estructura de un elemento, en un mismo xml puedo tener dos elementos que se llamen igual pero que tengan distinta estructura, para diferenciarlos se usa el namespace. Tampoco son obligatorios, puedes tener un servicio que no use ningún namespace tuyo.

El mundo de los webservice es complejo y es necesario leer mucha documentación.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #9 (permalink)  
Antiguo 28/11/2014, 17:12
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 3 meses
Puntos: 12
Respuesta: Consumir web service php con cliente JAVA

Gracias me ha servido de mucho tu aclaración

Etiquetas: cliente, consumir, php, service, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:24.