似乎不知道在哪里(什么目录-源或类)可以正确地对我的WebService类使用wsgen。。。
创建一个基于文本的示例文档WebService:
package hello;
import javax.jws.WebService;
@WebService
public class HelloWorld {
public void sayHello() {
System.out.println("Welcome to JAX-WS 2!");
}
}
创建了这样的发行商:
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());
}
}
使用EclipseHelios,我在相应的classes目录下自动将这两个文件构建为*.classes。
因此,从文件系统来看,我的项目是这样的:
/code/jws_sample
|
src
|
hello
|
HelloWorld.java
Publisher.java
|
classes
|
HelloWorld.class
Publisher.class
我将在哪个目录下运行wsgen?
当我在里面尝试时:
/代码/jaxws_sample/src/wsgen-cp。你好HelloWorld
收到:
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 <path>
-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
它确实在浏览器中向我显示了WSDL,而且当我试图从$MyProject/classes发出wsgen命令时,它确实创建了一个jaxws文件夹,其中包含SayHelloResponse.class文件,但没有SayHelloResponse.java文件?
感谢您花时间阅读本文。
看起来必须首先将文件编译成类文件,然后将它们提供给wsgen。
classpath <path> specify where to find input **class files**
我可能错了,但我相信我过去也必须这样做。
谢谢,
Jeffrey Kevin Pry
您需要启用'-keep',并且可以选择指定'-s/path/to/src'来保存JAXWS生成的文件。由于这些都是生成的文件,最佳实践通常会指导您不要保留这些文件,只生成用于打包的文件。保留文件并对其进行编辑的缺点是,如果重新生成文件,所做的更改可能会丢失。
例如,我有一个在Maven项目中定义的JAX-WS端点,每次打包服务时都会调用WSGEN目标。
您需要针对sei类文件而不是源文件运行wsgen。cd从src目录中取出,放入class目录中,并针对HelloWorld.class 使用wsgen
答案有点晚,但我可以帮助其他人。我使用此脚本在需要时生成WSDL和XSD(仅限Windows)。可以很容易地为Linux和Mac做好准备。我正在使用glassfish应用服务器的库。您可以将这些库替换为您的应用服务器或裸库。
@echo off
set WSGEN="C:Javajdk1.6.0_39binwsgen.exe"
set J1="C:Javajdk1.6.0_39libtools.jar"
set J2="C:Javaglassfish-3.1.2.2glassfishmoduleswebservices-osgi.jar"
set J3="C:Javaglassfish-3.1.2.2glassfishmodulesendorsedwebservices-api-osgi.jar"
set J4="C:Javaglassfish-3.1.2.2glassfishmodulesjaxb-osgi.jar"
set J5="C:Javaglassfish-3.1.2.2glassfishmodulesendorsedjaxb-api-osgi.jar"
set J6="C:Javaglassfish-3.1.2.2glassfishmodulesjavax.ejb.jar"
set J7="D:NetBeansProjectsOTPtargetOTP-1.0WEB-INFlibcommons-lang3-3.1.jar"
set J8="D:NetBeansProjectsOTPtargetOTP-1.0WEB-INFlibcommons-codec-1.8.jar"
set OUTPUT_DIR="D:NetBeansProjectsOTP"
@echo on
%WSGEN% -classpath %J1%;%OUTPUT_DIR%targetclasses;%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
首先,您需要在"hello"目录下创建目录"jaxws"。
然后,尝试从"/code/jws_sample"目录运行此命令:
wsgen -keep -cp classes/ -s src/ HelloWorld
-s命令告诉生成器将源文件放置在何处。
这是使用我在工作中使用的脚本创建的,在提交之前无法进行实际测试。然而,我希望这能给你一些方向。
奇怪的是,您生成的类文件不在/classes/hello/中,正如您的包所说。。。
好吧,考虑到你的类文件应该在/classes/hello/HelloWorld.class中,你所要做的就是:
wsgen-keep-cp-d-s/src你好。HelloWorld
刚刚检查过,对我来说效果很好。请记住,从您的类文件夹中调用CMD。
这是非常晚的回复,但对其他人有利:
wsgen -verbose -keep -cp <folder with .class files> hello.HelloWorld -s <folder where u want the generated artifacts>
-verbose选项用于显示日志<>-cp选项是为了防止当前工作目录与.class文件所在的目录不相同。-s用于目标源文件。-keep选项用于保持生成的文件。