似乎不知道在我的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());
}
}
使用Eclipse Helios,我会自动将这两个文件构建为相应类目录下的* .classes。
所以,从文件系统来看,我的项目看起来像这样:
/code/jws_sample
|
src
|
hello
|
HelloWorld.java
Publisher.java
|
classes
|
HelloWorld.class
Publisher.class
我会在哪个目录中运行wsgen?
当我在里面尝试时:
/ code / jaxws_sample / src / wsgen -cp。 hello.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命令时,它实际上创建了一个带有SayHelloResponse.class文件但不是SayHelloResponse.java文件的jaxws文件夹? / p>
感谢您抽出宝贵时间阅读本文。
答案 0 :(得分:7)
看起来您必须首先将文件编译为类文件,然后将它们提供给wsgen。
classpath <path> specify where to find input **class files**
我可能错了,但我相信我过去也必须这样做。
谢谢,
Jeffrey Kevin Pry
答案 1 :(得分:1)
您需要启用'-keep'并且您可以选择指定'-s / path / to / src'来保存JAXWS生成的文件。由于这些是生成的文件,因此最佳实践通常会指导您不要保留文件并仅生成文件以进行打包。保留文件并可能编辑它们的缺点是,如果重新生成文件,您的更改可能会丢失。
例如,我有一个在Maven项目中定义的JAX-WS端点,每次打包服务时都会调用WSGEN目标。
答案 2 :(得分:1)
你需要对你的sei类文件而不是源文件运行wsgen。 cd退出src目录并进入类目录,wsgen对着HelloWorld.class
答案 3 :(得分:1)
有点迟到但我可以帮助别人。我正在使用此脚本在需要时生成WSDL和XSD(仅限Windows)。可以轻松为Linux和Mac做好准备。我正在使用glassfish appserver的库。您可以将这些库替换为您的应用服务器或裸库。
@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
答案 4 :(得分:0)
首先,您需要在“hello”目录下创建目录“jaxws”。
然后,尝试从“/ code / jws_sample”目录运行此命令:
wsgen -keep -cp classes/ -s src/ HelloWorld
-s 命令告诉生成器放置源文件的位置。
这是使用我在工作中使用的脚本创建的,在提交之前无法对此进行测试。但是,我希望这会给你一些指导。
答案 5 :(得分:0)
奇怪的是你生成的类文件不在/ classes / hello /中,因为你的软件包说...
好吧,考虑到您的类文件在/classes/hello/HelloWorld.class中应该如此,您只需要从您的类文件夹执行:
wsgen -keep -cp。 -d。 -s ../src hello.HelloWorld
刚刚检查并为我工作正常。 Remebember,从您的类文件夹中调用CMD 。