Esta publicación servirá para ir colocando fragmentos de consultas que en algún momento me fueron útiles para usarlo en MongoDB Fragmento 1: Se requería obtener todos los elementos que dentro de un atributo que es de tipo array(arreglo) coincida con type:"fire" Fragmento 2: Se requería actualizar el atributo " lastUpdate " de toda la colección donde la edad sea mayor o igual a 15.
Este es un un ejemplo básico de un Web Service desarollado en Java especificacion JAX-WS, en algun momento lo necesitare recordar por esa razón coloco por si alguna vez mi corta memoria me traiciona, y claro para que alguien mas lo pueda utilizar como base.
Herramientas utilizadas
Java 1.6
Eclipse Version: 3.7.2 Indigo
JAX-WS RI 2.2.8
Soap UI 4.5.2
Tomcat 6
Paso 1:Generar el proyecto desde el menu new project
Y click en boton Finish
WSOperaciones
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
JAX-WS endpoint - ServidorService
ServidorService
ServidorService
1
ServidorService
/ServidorPort
index.jsp
Paso 5: Se debe descargar las librerías, para este caso yo utilce JAX-WS RI 2.2.8 http://jax-ws.java.net/
Quedara de la siguiente forma
A pero claro que tuve mis issues durante el desarrollo que ahora menciono :
1.-Error configurando escuchador de aplicación de clase.
Este error salio al momento de querer desplegar el proyecto en tomcat, esto se soluciona con agregar las librerías JAX-WS que se descargan de http://jax-ws.java.net/
GRAVE: Error configurando escuchador de aplicación de clase com.sun.xml.ws.transport.http.servlet.WSServletContextListener
java.lang.ClassNotFoundException: com.sun.xml.ws.transport.http.servlet.WSServletContextListener
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4149)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4705)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
at org.apache.catalina.core.StandardService.start(StandardService.java:525)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
19/08/2013 11:37:44 PM org.apache.catalina.core.StandardContext listenerStart
GRAVE: Se ha saltado la instalación de escuchadores de aplicación debido a error(es) previo(s)
19/08/2013 11:37:44 PM org.apache.catalina.core.StandardContext start
GRAVE: Error listenerStart
19/08/2013 11:37:44 PM org.apache.catalina.core.StandardContext start
GRAVE: Falló en arranque del Contexto [/WSOperaciones] debido a errores previos
19/08/2013 11:37:44 PM org.apache.coyote.http11.Http11Protocol start
INFO: Arrancando Coyote HTTP/1.1 en puerto http-8080
19/08/2013 11:37:44 PM org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
19/08/2013 11:37:44 PM org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/12 config=null
19/08/2013 11:37:44 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 282 ms
2.- javax.xml.ws.WebServiceException: javax.xml.bind.MarshalException inguna de sus superclases se conocen en este contexto.
Este otro error me salio cuando quise consumir el servicio en soap ui, la solucion fue colocar una anotacion @XmlSeeAlso({Respuesta.class}) en clase Servidor ,que hace referencia al pojo que utilizo para retornar los valores de respuesta
GRAVE: caught throwable
javax.xml.ws.WebServiceException: javax.xml.bind.MarshalException
- with linked exception:
[javax.xml.bind.JAXBException: class com.operaciones.basicas.Respuesta ni ninguna de sus superclases se conocen en este contexto.]
at com.sun.xml.ws.message.jaxb.JAXBMessage.writePayloadTo(JAXBMessage.java:412)
at com.sun.xml.ws.message.AbstractMessageImpl.writeTo(AbstractMessageImpl.java:155)
at com.sun.xml.ws.api.message.MessageWrapper.writeTo(MessageWrapper.java:230)
at com.sun.xml.ws.encoding.StreamSOAPCodec.encode(StreamSOAPCodec.java:134)
at com.sun.xml.ws.encoding.SOAPBindingCodec.encode(SOAPBindingCodec.java:242)
at com.sun.xml.ws.transport.http.HttpAdapter.encodePacket(HttpAdapter.java:464)
at com.sun.xml.ws.transport.http.HttpAdapter.access$100(HttpAdapter.java:101)
at com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:697)
at com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:266)
at com.sun.xml.ws.transport.http.servlet.ServletAdapter.invokeAsync(ServletAdapter.java:225)
at com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doGet(WSServletDelegate.java:161)
at com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doPost(WSServletDelegate.java:197)
at com.sun.xml.ws.transport.http.servlet.WSServlet.doPost(WSServlet.java:81)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:643)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:662)
Caused by: javax.xml.bind.MarshalException
- with linked exception:
[javax.xml.bind.JAXBException: class com.operaciones.basicas.Respuesta ni ninguna de sus superclases se conocen en este contexto.]
at com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:276)
at com.sun.xml.bind.v2.runtime.BridgeImpl.marshal(BridgeImpl.java:104)
at com.sun.xml.bind.api.Bridge.marshal(Bridge.java:145)
at com.sun.xml.ws.db.glassfish.BridgeWrapper.marshal(BridgeWrapper.java:176)
at com.sun.xml.ws.message.jaxb.JAXBMessage.writePayloadTo(JAXBMessage.java:403)
... 26 more
Caused by: javax.xml.bind.JAXBException: class com.operaciones.basicas.Respuesta ni ninguna de sus superclases se conocen en este contexto.
at com.sun.xml.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer.java:247)
at com.sun.xml.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer.java:262)
at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:653)
at com.sun.xml.bind.v2.runtime.property.ArrayElementNodeProperty.serializeItem(ArrayElementNodeProperty.java:69)
at com.sun.xml.bind.v2.runtime.property.ArrayElementProperty.serializeListBody(ArrayElementProperty.java:172)
at com.sun.xml.bind.v2.runtime.property.ArrayERProperty.serializeBody(ArrayERProperty.java:159)
at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:361)
at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:696)
at com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:271)
... 30 more
Caused by: javax.xml.bind.JAXBException: class com.operaciones.basicas.Respuesta ni ninguna de sus superclases se conocen en este contexto.
at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getBeanInfo(JAXBContextImpl.java:593)
at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:648)
... 36 more
Bueno por el momento es todo nos leemos en la proxima y coloco el proyecto completo para importalo
Saludos
Descarga Proyecto Aqui
Herramientas utilizadas
Java 1.6
Eclipse Version: 3.7.2 Indigo
JAX-WS RI 2.2.8
Soap UI 4.5.2
Tomcat 6
Paso 1:Generar el proyecto desde el menu new project
Damos click en siguiente
Y click en boton Finish
Se genera el proyecto como se ve a continuación
Paso2: Agregamos el paquete com.operaciones.basicas y los archivos Respuesta.java y Servidor.java
Aqui el codigo de cada clase
package com.operaciones.basicas;
import java.util.ArrayList;
import java.util.List;
import javax.jws.WebMethod;
import javax.jws.WebService;
@WebService()
public class Servidor {
@WebMethod(operationName="Operaciones")
public List Operaciones(int numero1,int numero2){
List lista=new ArrayList();
Respuesta r=new Respuesta();
int suma= numero1+ numero2;
int resta=numero1-numero2;
double division= numero1/numero2;
int multiplicacion=numero1*numero2;
r.setTipo("Respuesta Suma");
r.setRespuesta(String.valueOf(suma));
lista.add(r);
r=new Respuesta();
r.setTipo("Respuesta resta");
r.setRespuesta(String.valueOf(resta));
lista.add(r);
r=new Respuesta();
r.setTipo("Respuesta division");
r.setRespuesta(String.valueOf(division));
lista.add(r);
r=new Respuesta();
r.setTipo("Respuesta multiplicacion");
r.setRespuesta(String.valueOf(multiplicacion));
lista.add(r);
return lista;
}
}
package com.operaciones.basicas;
public class Respuesta {
String tipo;
String respuesta;
public String getTipo() {
return tipo;
}
public void setTipo(String tipo) {
this.tipo = tipo;
}
public String getRespuesta() {
return respuesta;
}
public void setRespuesta(String respuesta) {
this.respuesta = respuesta;
}
}
Paso 3: Agregamos en WebContent el xml sun-jaxws.xml
aqui el contenido
xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime">
implementation="com.operaciones.basicas.Servidor"
url-pattern="/ServidorPort">
En el web.xml deberemos colocar el listener para que sea llamado al momento desplegar el proyecto
debe quedar maso menos así
com.sun.xml.ws.transport.http.servlet.WSServlet
com.sun.xml.ws.transport.http.servlet.WSServletContextListener
Paso 4: Desplegar en Tomcat , con el wizard se nota como en las siguientes figuras
Es probable que al momento de querer ver el WSDL del web service en el navegador, no se logre desplegar por la razón de que mi eclipse no tiene las librerias jax-ws como otros IDE's(Myeclipse por ejemplo)
Paso 5: Se debe descargar las librerías, para este caso yo utilce JAX-WS RI 2.2.8 http://jax-ws.java.net/
Quedara de la siguiente forma
Y ahora si volvemos a desplegar el proyecto y nos dirigimos a http://localhost:8080/WSOperaciones/ServidorPort
o tambien http://localhost:8080/WSOperaciones/ServidorPort?wsdl y podremos ver nuestro WSDL
Paso 6: Ahora a probar con SOAP UI , solo necesitamos la url para hacerlo como se ve en la imagen
Ejecutamos y entonces el resultado se vera de la siguiente forma
1.-Error configurando escuchador de aplicación de clase.
Este error salio al momento de querer desplegar el proyecto en tomcat, esto se soluciona con agregar las librerías JAX-WS que se descargan de http://jax-ws.java.net/
GRAVE: Error configurando escuchador de aplicación de clase com.sun.xml.ws.transport.http.servlet.WSServletContextListener
java.lang.ClassNotFoundException: com.sun.xml.ws.transport.http.servlet.WSServletContextListener
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4149)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4705)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
at org.apache.catalina.core.StandardService.start(StandardService.java:525)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
19/08/2013 11:37:44 PM org.apache.catalina.core.StandardContext listenerStart
GRAVE: Se ha saltado la instalación de escuchadores de aplicación debido a error(es) previo(s)
19/08/2013 11:37:44 PM org.apache.catalina.core.StandardContext start
GRAVE: Error listenerStart
19/08/2013 11:37:44 PM org.apache.catalina.core.StandardContext start
GRAVE: Falló en arranque del Contexto [/WSOperaciones] debido a errores previos
19/08/2013 11:37:44 PM org.apache.coyote.http11.Http11Protocol start
INFO: Arrancando Coyote HTTP/1.1 en puerto http-8080
19/08/2013 11:37:44 PM org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
19/08/2013 11:37:44 PM org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/12 config=null
19/08/2013 11:37:44 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 282 ms
2.- javax.xml.ws.WebServiceException: javax.xml.bind.MarshalException inguna de sus superclases se conocen en este contexto.
Este otro error me salio cuando quise consumir el servicio en soap ui, la solucion fue colocar una anotacion @XmlSeeAlso({Respuesta.class}) en clase Servidor ,que hace referencia al pojo que utilizo para retornar los valores de respuesta
GRAVE: caught throwable
javax.xml.ws.WebServiceException: javax.xml.bind.MarshalException
- with linked exception:
[javax.xml.bind.JAXBException: class com.operaciones.basicas.Respuesta ni ninguna de sus superclases se conocen en este contexto.]
at com.sun.xml.ws.message.jaxb.JAXBMessage.writePayloadTo(JAXBMessage.java:412)
at com.sun.xml.ws.message.AbstractMessageImpl.writeTo(AbstractMessageImpl.java:155)
at com.sun.xml.ws.api.message.MessageWrapper.writeTo(MessageWrapper.java:230)
at com.sun.xml.ws.encoding.StreamSOAPCodec.encode(StreamSOAPCodec.java:134)
at com.sun.xml.ws.encoding.SOAPBindingCodec.encode(SOAPBindingCodec.java:242)
at com.sun.xml.ws.transport.http.HttpAdapter.encodePacket(HttpAdapter.java:464)
at com.sun.xml.ws.transport.http.HttpAdapter.access$100(HttpAdapter.java:101)
at com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:697)
at com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:266)
at com.sun.xml.ws.transport.http.servlet.ServletAdapter.invokeAsync(ServletAdapter.java:225)
at com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doGet(WSServletDelegate.java:161)
at com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doPost(WSServletDelegate.java:197)
at com.sun.xml.ws.transport.http.servlet.WSServlet.doPost(WSServlet.java:81)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:643)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:662)
Caused by: javax.xml.bind.MarshalException
- with linked exception:
[javax.xml.bind.JAXBException: class com.operaciones.basicas.Respuesta ni ninguna de sus superclases se conocen en este contexto.]
at com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:276)
at com.sun.xml.bind.v2.runtime.BridgeImpl.marshal(BridgeImpl.java:104)
at com.sun.xml.bind.api.Bridge.marshal(Bridge.java:145)
at com.sun.xml.ws.db.glassfish.BridgeWrapper.marshal(BridgeWrapper.java:176)
at com.sun.xml.ws.message.jaxb.JAXBMessage.writePayloadTo(JAXBMessage.java:403)
... 26 more
Caused by: javax.xml.bind.JAXBException: class com.operaciones.basicas.Respuesta ni ninguna de sus superclases se conocen en este contexto.
at com.sun.xml.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer.java:247)
at com.sun.xml.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer.java:262)
at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:653)
at com.sun.xml.bind.v2.runtime.property.ArrayElementNodeProperty.serializeItem(ArrayElementNodeProperty.java:69)
at com.sun.xml.bind.v2.runtime.property.ArrayElementProperty.serializeListBody(ArrayElementProperty.java:172)
at com.sun.xml.bind.v2.runtime.property.ArrayERProperty.serializeBody(ArrayERProperty.java:159)
at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:361)
at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:696)
at com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:271)
... 30 more
Caused by: javax.xml.bind.JAXBException: class com.operaciones.basicas.Respuesta ni ninguna de sus superclases se conocen en este contexto.
at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getBeanInfo(JAXBContextImpl.java:593)
at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:648)
... 36 more
Bueno por el momento es todo nos leemos en la proxima y coloco el proyecto completo para importalo
Saludos
Descarga Proyecto Aqui
minino un hola mundo... para saber que esto lo es leido por alguien mas que yo..
ResponderBorrarHola mundo
ResponderBorrarAhora en serio, gracias!!
ResponderBorrarMe ha servido de mucho el: @XmlSeeAlso({Respuesta.class})
He notado que hay varias descargas del proyecto....Cuentenme como les va con el ejemplo ? si funciona ?
ResponderBorrarI would like to thank you for the efforts you have put in penning this site.
ResponderBorrarI'm hoping to see the same high-grade content by you
later on as well. In truth, your creative writing abilities has
inspired me to get my own, personal website now ;)
My webpage so comprar semillas de marihuana