Error compilando WebService

Hola!
Estoy tratando de compilar un ejemplo, aunque hice mi WS, la duda me ha quedado porque los conceptos de Java que tengo como que estann cruzados

Tengo esta clase
 

Al tratar de compilarla, compilo la que implementa elmetodo , consigo este error:

 

Para mi eso estaba correcto por el asunto de la herencia pero parece que no. Esto lo tome de un ejemplo que alguien de aca me dio pero no puedo compilarlo.

Pueden darme alguna pista el porque el error?

Gracias

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de neko069

Tus anotaciones deben de ir

Tus anotaciones deben de ir en la implementación del WS, la interface no debe estar casada con ninguna anotación.
En el caso de la anotación   bórrala de la interface, quita la de   y sustitúyela por la de  

Imagen de ezamudio

Greeting

La bronca de compilación es porque únicamente mandas compilar la implementación, sin haber compilado la interfaz primero. Primero compila Greeting.java y luego GreetingImpl.java

Imagen de macaruchi

Lo hice como dices y como

Lo hice como dices y como quiera me da el mismo error.

Imagen de ezamudio

directorio

Es que creo que te metes al directorio donde está la clase y no deberías. Debes estar en el directorio raíz de los paquetes (ws si no me equivoco) y compilar juma/mohammad/Greeting*.java

Imagen de macaruchi

UHmm... en eso tienes razon

UHmm... en eso tienes razon me meto al directorio donde estan las clases. Voy hacerlo como dices ahora.
Tienes razon!! Funionco cmo dices . Me podrias explicar porque pasa esto , es decir, por el asunto de los paquetes no entendi muy bien.

Imagen de ezamudio

paquetes

Los paquetes sirven para organizar conjuntos de clases y no tener que usar nombres de clases excesivamente largos para evitar conflictos. Puede haber dos clases con el mismo nombre, siempre y cuando estén en distintos paquetes. El nombre completo de una clase incluye el paquete que la contiene. Es como su apellido, de alguna forma.

Cuando usas paquetes, el generador crea una estructura de directorios que refleja los paquetes y subpaquetes. En este caso al compilar tu clase y/o interfaz, te crea el subdirectorio juma y dentro de él te crea mohammad. Lo más recomendable es que hagas lo mismo con los fuentes, que es precisamente lo que hiciste: un directorio juma, un subdirectorio mohammad y ahí dentro pones tus fuentes de Java.

Lo que sigue es que compiles desde el directorio que contiene todos tus fuentes, llamémosle el directorio raíz (no es el raíz del filesystem, solamente de tus fuentes). Cuando compilas GreetingImpl, el compilador ve que depende de una interfaz llamada Greeting. Como no le pones paquete, infiere que debe estar en el mismo paquete de la clase que está compilando, o sea juma.mohammad, y busca entonces el directorio juma, subdirectorio mohammad, y encontrar ahí Greeting.class. Cuando compilas desde el raíz de fuentes pues funciona de maravilla. Pero si compilas tu clase corriendo javac desde juma/mohammad, no va a encontrar el Greeting, porque no está en donde debe (lo va a buscar juma/mohammad/juma/mohammad). De hecho es probable que en juma/mohammad tengas otro juma/mohammad, si es que pudiste compilar Greeting.java desde juma/mohammad.

Imagen de macaruchi

La clase me compilo bien con

La clase me compilo bien con el paquete pero me sale un error al generar esto

#>wsgen -s src -d build/classes -cp build/classes juma.mohammad.GreetingImpl
 

Me dice que la clase no la encontró pero esta compilada ahi
 

Imagen de ezamudio

classpath

y para qué le indicas que el classpath es build/classes si realmente es simplemente   ?

Imagen de macaruchi

Ok, lo cambien como dices

Ok, lo cambien como dices pero tengo esto ahora
 

Imagen de ezamudio

primer comentario

Ahora regresa al primer comentario, el que puso neko069, y haz lo que te dice.

Imagen de macaruchi

Hice exactamente lo que dice

Hice exactamente lo que dice Neko09 pero de igual forma me da el mismo error de arriba

 

Lo que el dice es que no puedo ligar estas dos clases. Pero no veo otra forma de agregarlo con tomcat. Cuando lo publique con Java directamente no hubo problema solo ...
 
pero seguro esta forma no funciona para publicar con Tomcat

Imagen de neko069

Si entendí bien tu último

Si entendí bien tu último comentario, es que cuando metes tu war al tomcat, y lo despliegas, al momento de querer acceder a la URL donde se supone que está tu WS no lo encuentras, es cuando te sale el error ése de "el servicio XXX no está disponible", si es así, es simple, tomcat no levanta el WS porque no ejecuta tu método main; entonces, checa ésta liga y ahí te guias de qué te hace falta para que puedas acceder.
También encontré ésta liga a ver si te sirve
No cuentas como te fue ;¬)

Imagen de macaruchi

Ambas las tengo y si miras

Ambas las tengo y si miras los ejemplos que pongo son de la segunda liga que me enviaste que es el que estoy tratando de compilar. Estoy usando el segundo. EL problema no es realmente al momento de desplegar sino de compilar y generar el wsdl.
Basicamente hice lo mismo que ellos dicen, en el segundo, pero no me deja compilar las clases luego me dijiste que las interfaces no pueden tener anotaciones, raro porque en la liga 2 que me diste ,al == en la 1, ellos ponen las anotaciones en la interfaz, pero bueno de esa forma quitando las anotaciones pude compilar pero al generar el wsgen es que me da el error de que no se pueden usar webservices y webmethod, error arriba.

Imagen de neko069

No dije que no puedas ligar

No dije que no puedas ligar tus clases ( o tu interface con tu implementación) dije que tu interface no debe estar casada con ninguna anotación.
Tienes la interface Greeting entonces, sólo define tu método sayHello

 

Y ya, en tu implementación debes entonces de colocar todo el rollo de anotaciones, en éste caso de los WS.
Del segundo error que tienes, del cual resumiré sólo el renglón interesante

 

Ése error precisamente, es porque tienes tu interface con alguna anotación, y además la estás colocando de nuevo en tu implementación, y sospecho que es por la anotación  

Si es así quita cualquier anotación de la interface como lo ejemplifiqué e inténtalo de nuevo

Imagen de macaruchi

package juma.mohammad; public

 

Lo hice asi y ahora me da esto al tratar de generar el wsgen

 

Imagen de ezamudio

endpointInterface

Me parece que si a la anotación   le indicas la  , entonces NO le debes poner   a los métodos. La razón es que le estás indicando una interfaz y por lo tanto lo que hará será publicar los métodos de la interfaz.

Esto lo infiero porque estoy revisando un web service que yo tengo y le puse   pero sin lo de   porque no implemento ninguna interfaz, y entonces le pongo a cada método anotaciones de WebMethod, WebParam y WebResult.

Probablemente para que funcione tu ejemplo lo que tienes que hacer es ponerle a tu implementación solamente la anotación de @WebService tal como la tienes, pero todo lo de   va en la interfaz (pero la interfaz NO debe llevar anotación de WebService, solamente sus métodos llevan las decoraciones necesarias y probablemente puedas omitir @WebMethod).

Imagen de macaruchi

OK, ahi me funciono bastante

OK, ahi me funciono bastante bien en java mi problema es cuando trato de llevarlo a Tomcat. En java lo hice sin necesidad de interfaces solo hice la implementacion y corrio muy bien.

Imagen de neko069

Ejemplo WS en tomcat

Van mis ejemplos de cómo lo ejecuté en tomcat. De entrada necesitas un archivo llamado   y se coloca en el mismo folder que el  
El contenido de dicho xml es como sigue:

 

Después va una modificación a tu   debe quedar así:

 

Después, dentro del tomcat, incluyes los jar que vienen en la página de referencia de JAX-WS en éste link, en la ruta   según nada más debes meter algunos, pero al levantar el gato, me marcaba errores por cuestiones de   y para no estar batallando, los metí todos.

Se supone que éso es suficiente para que, cuando levante tomcat, y accedas a una URL de tipo   te aparezca en la ventana del explorador un xml representando tu WS.

Ojalá te sirva el ejemplo ( se aceptan galletas y dinero ) ;¬)