2011-06-23 7 views
7

no parecen saber dónde (en qué directorio - fuente o clases) para utilizar adecuadamente wsgen contra mi clase WebService ...Donde usar wsgen?

Crear un documento de muestra WebService basado literal:

package hello; 

import javax.jws.WebService; 

@WebService 
public class HelloWorld { 

public void sayHello() { 
     System.out.println("Welcome to JAX-WS 2!"); 
    } 
} 

Creado el Editor de esta manera:

package hello; 

import javax.xml.ws.Endpoint; 

public class Publisher { 
    public static void main(String[] args) { 
     Endpoint.publish("http://localhost:8080/jaxws/hello", new HelloWorld()); 
    } 
} 

Usando Eclipse Helios, construyo automáticamente ambos archivos como * .classes debajo del directorio de clases correspondiente.

Por lo tanto, desde el sistema de archivos, mi proyecto es el siguiente:

/code/jws_sample 
      | 
      src 
      | 
       hello 
        | 
        HelloWorld.java 
        Publisher.java 
      | 
      classes 
        | 
        HelloWorld.class 
        Publisher.class 

En qué directorio iba a ejecutar wsgen?

cuando lo probé en el interior:

/código/jaxws_sample/src/wsgen -cp. hello.HelloWorld

Recibido:

Class not found: "hello.HelloWorld" 

    Usage: WSGEN [options] <SEI> 

    where [options] include: 

    -classpath <path>   specify where to find input class files 

    -cp <path>     same as -classpath &lt;path&gt; 

    -d <directory>    specify where to place generated output files 

    -extension      
          allow vendor extensions - functionality not specified 
          by the specification. Use of extensions may 
          result in applications that are not portable or 
          may not interoperate with other implementations 
    -help      display help 

    -keep      keep generated files 

    -r <directory>   resource destination directory, specify where to 
          place resouce files such as WSDLs 

    -s <directory>   specify where to place generated source files 

    -verbose     output messages about what the compiler is doing 

    -version     print version information 

    -wsdl[:protocol]   generate a WSDL file. The protocol is optional. 
          Valid protocols are [soap1.1, Xsoap1.2], 
          the default is soap1.1. 
          The non stanadard protocols [Xsoap1.2] 
          can only be used in conjunction with the 
          -extension option. 

    -servicename <name>  specify the Service name to use in the generated WSDL 
          Used in conjunction with the -wsdl option. 

    -portname <name>   specify the Port name to use in the generated WSDL 
          Used in conjunction with the -wsdl option. 

    Examples: 

    wsgen -cp . example.Stock 
    wsgen -cp . example.Stock -wsdl -servicename {http://mynamespace}MyService 

lo que realmente hace muéstrame el WSDL en un navegador y también cuando traté de emitir el comando wsgen desde $ miproyecto/clases que realmente hizo crear una carpeta con el jaxws Archivos SayHelloResponse.class pero no los archivos SayHelloResponse.java?

Gracias por tomarse el tiempo para leer esto.

Respuesta

7

Parece que primero tiene que compilar los archivos en archivos de clase y luego alimentarlos a wsgen.

classpath <path>   specify where to find input **class files** 

Podría estar equivocado, pero creo que tuve que hacer lo mismo en el pasado.

Gracias,

Jeffrey Kevin palanca

+0

Lo hice ... Eclipse creó el directorio de clases correspondiente y lo hizo así: $ MyProject/classes/wsgen -cp. hello.HelloWorld funciona, pero pone los stubs generados dentro de las clases dir. ¿Cómo se puede usar la -d para ponerlos dentro del directorio src? –

1

necesita habilitar '-keep' y se puede especificar de forma opcional '-s/ruta/a/src' para guardar el JAXWS archivos generados. Dado que estos son archivos generados, las mejores prácticas generalmente lo guían para que no guarde los archivos y para que solo los genere para el empaquetado. La desventaja de mantener los archivos y quizás editarlos es que si regenera los archivos, sus cambios podrían perderse.

Por ejemplo, tengo un punto final JAX-WS que se define en un proyecto Maven y se llama al objetivo WSGEN cada vez que se empaqueta el servicio.

1

necesita ejecutar wsgen contra su archivo de clase sei no el archivo de origen. cd fuera del directorio src y en el directorio de clase y wsgen contra HelloWorld.class

0

Primero, debe crear el directorio "jaxws" en su directorio "hello".

A continuación, intente ejecutar este comando desde el directorio "/ código/jws_sample":

wsgen -keep -cp classes/ -s src/ HelloWorld 

El comando -s le dice al generador de dónde colocar los archivos de origen.

Esto se creó con un script que uso aquí en el trabajo y no pude probarlo antes de enviarlo. Sin embargo, espero que esto te dé una dirección.

0

Es extraño que los archivos de clase generados no están en clases// hola/como dice su paquete ...

Bueno, teniendo en cuenta que los archivos de clases está en /classes/hello/HelloWorld.class como debería ser, todo lo que tiene que hacer de su carpeta de clases es:

wsgen -keep -cp. -d. -s ../src hello.HelloWorld

Acabo de comprobar y funcionó bien para mí. Recuerda, llama a CMD desde tu carpeta de clases.

1

Un poco tarde en la respuesta pero puedo ayudar a otros. Estoy usando esta secuencia de comandos para generar WSDL y XSD cuando sea necesario (solo Windows). Se puede preparar fácilmente para Linux y Mac. Estoy usando la biblioteca del servidor de videos glassfish. Puede reemplazar estas bibliotecas con su servidor de aplicaciones o libs vacías.

@echo off 
set WSGEN="C:\Java\jdk1.6.0_39\bin\wsgen.exe" 
set J1="C:\Java\jdk1.6.0_39\lib\tools.jar" 
set J2="C:\Java\glassfish-3.1.2.2\glassfish\modules\webservices-osgi.jar" 
set J3="C:\Java\glassfish-3.1.2.2\glassfish\modules\endorsed\webservices-api-osgi.jar" 
set J4="C:\Java\glassfish-3.1.2.2\glassfish\modules\jaxb-osgi.jar" 
set J5="C:\Java\glassfish-3.1.2.2\glassfish\modules\endorsed\jaxb-api-osgi.jar" 
set J6="C:\Java\glassfish-3.1.2.2\glassfish\modules\javax.ejb.jar" 
set J7="D:\NetBeansProjects\OTP\target\OTP-1.0\WEB-INF\lib\commons-lang3-3.1.jar" 
set J8="D:\NetBeansProjects\OTP\target\OTP-1.0\WEB-INF\lib\commons-codec-1.8.jar" 
set OUTPUT_DIR="D:\NetBeansProjects\OTP" 
@echo on 
%WSGEN% -classpath %J1%;%OUTPUT_DIR%\target\classes;%J2%;%J3%;%J4%;%J5%;%J6%;%J7%;%J8%; -d %OUTPUT_DIR%\jax-ws -Xendorsed -keep -wsdl -r %OUTPUT_DIR%\jax-ws -s %OUTPUT_DIR%\jax-ws -verbose com.avalant.ws.GenerateOTPWS 
0

Esto es muy tardía respuesta, pero para beneficio de los demás:

wsgen -verbose -keep -cp <folder with .class files> hello.HelloWorld -s <folder where u want the generated artifacts> 

La opción -verbose es mostrar los registros. <> La opción -cp es en caso de que su directorio de trabajo actual no sea el mismo donde están presentes los archivos .class. -s es para archivos de origen de destino. La opción -keep es para mantener generados los archivos.

+0

no funciona. Todavía da el mismo error – bademba