[WebService SOAP]JAX-WS : wsgen tool example

Cuando queremos enviar un wsdl a un cliente y no tenemos construido y publicado el webservice en un servidor de aplicaciones, la opción que nos queda es construir un proyecto web dummy para crear el wsdl, pero esto tiene una serie de inconvenientes ya que el XSD queda autogerenado al IDE que estemos usando, por ejemplo el IDE NetBeans 8.0.1 este ide utiliza la opción en de generar el wsdl con  la librería jaxws-ri ej:



    
    
        
        
        
        
        
            
        
    
    
        
            
        
        
            
        
    
    





Bajar libreria:

https://jaxb.java.net/2.2.11/


Para ejecutar el comando en linux:

JAXWS_HOME/bin/wsgen.sh -help


Syntax

wsgen [options] 
 
The following table lists the wsgen options:
OptionDescription
-classpath Specify where to find input class files.
-cp Same as -classpath .
-d Specify where to place generated output files.
-extensionAllow 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.
-helpDisplay help.
-JPass this option to Javac compiler. Note: use '=' instead of space as a delimiter between option name and its value.
-keepKeep generated files.
-r Used only in conjunction with the -wsdl option. Specify where to place generated resource files such as WSDLs.
-s Specify where to place generated source files.
-encoding Set the encoding name for generated sources, such as EUC-JP or UTF-8. If -encoding is not specified, the platform default encoding is used.
-verboseOutput messages about what the compiler is doing.
-versionPrint version information. Use of this option will ONLY print version information. Normal processing will not occur.
-fullversionPrint full version information. Use of this option will ONLY print version information. Normal processing will not occur.
-wsdl[:protocol]By default wsgen does not generate a WSDL file. This flag is optional and will cause wsgen to generate a WSDL file and is usually only used so that the developer can look at the WSDL before the endpoint is deploy. The protocol is optional and is used to specify what protocol should be used in the wsdl:binding. Valid protocols include: soap1.1 and Xsoap1.2. The default is soap1.1. Xsoap1.2 is not standard and can only be used in conjunction with the -extension option.
-servicename Used only in conjunction with the -wsdl option. Used to specify a particular wsdl:service name to be generated in the WSDL. Example:
-servicename "{http://mynamespace/}MyService"
-portname Used only in conjunction with the -wsdl option. Used to specify a particular wsdl:port name to be generated in the WSDL. Example:
-portname "{http://mynamespace/}MyPort"
-inlineSchemasUsed to inline schemas in a generated wsdl. Must be used in conjunction with the -wsdl option.
-x Used to specify External Web Service Metadata xml descriptor to be used. If there are more such files, the option must be used before each of those.
-XnocompileDo not compile generated Java files.
 

Example

wsgen -d stock -cp myclasspath stock.StockService 
This will generate the wrapper classes needed for StockService annotated with @WebService annotation inside stockdirectory.
wsgen -wsdl -d stock -cp myclasspath stock.StockService 
This will generate a SOAP 1.1 WSDL and schema for your Java class stock.StockService annotated with @WebService annotation.
wsgen -wsdl:Xsoap1.2 -d stock -cp myclasspath stock.StockService 
Will generate a SOAP 1.2 WSDL.

Como usarlo en un proyecto ya contruido?

Primero que nada debemos encontrar el classpath en donde estan todas los .Class :



 Ahora se ejecuta el comando en el wsgen:

sh /home/luxo/Descargas/WSDL/jaxws-ri/bin/wsgen.sh -verbose -keep -d /home/luxo/Descargas/WSDL/ -cp /home/luxo/WSQPS_MM/build/web/WEB-INF/classes/ cl.entel.wsautogestionmm.services.WSMMAutoGestionImpl -wsdl -inlineSchemas


Nota: debemos asegurarnos que tenemos todos los .Class que necesitamos en la ruta "/home/luxo/WSQPS_MM/build/web/WEB-INF/classes/" ya que si tenemos otros target Name Space le faltaran deficiones de objetos y dara un error como este:


luxo@luxo-Vostro-3460:~/WSQPS_MM/src/java$ sh /home/luxo/Descargas/WSDL/jaxws-ri/bin/wsgen.sh -verbose -keep -d /home/luxo/Descargas/WSDL/ -cp /home/luxo/WSQPS_MM/build/web/WEB-INF/classes/ cl.entel.wsautogestionmm.services.WSMMAutoGestionImpl -wsdl -inlineSchemas
Exception in thread "main" java.lang.NoClassDefFoundError: cl/allware/qps/service/pcrf/unified/types/SubscriberType
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)



No hay comentarios.:

Problemas de activación WIFI6 en LG_OLED55CXPSA

  Mi experiencia con este TV  ah sido impecable hasta ahora, llevaba un uso normal y no tenia que usar la conexión por wifi ya que tengo una...