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/
https://jaxb.java.net/2.2.11/
Para ejecutar el comando en linux:
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:
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)
JAXWS_HOME/bin/wsgen.sh -help
Syntax
wsgen [options]
The following table lists the wsgen options:
| Option | Description |
|---|---|
-classpath
| Specify where to find input class files. |
-cp | Same as -classpath
. |
-d | 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. |
-J | Pass this option to Javac compiler. Note: use '=' instead of space as a delimiter between option name and its value. |
-keep | Keep 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. |
-verbose | Output messages about what the compiler is doing. |
-version | Print version information. Use of this option will ONLY print version information. Normal processing will not occur. |
-fullversion | Print 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"
|
-inlineSchemas | Used 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. |
-Xnocompile | Do not compile generated Java files. |
Example
wsgen -d stock -cp myclasspath stock.StockServiceThis will generate the wrapper classes needed for StockService annotated with @WebService annotation inside stockdirectory.
wsgen -wsdl -d stock -cp myclasspath stock.StockServiceThis 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.StockServiceWill 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)
