在哪里使用wsgen



似乎不知道在哪里(什么目录-源或类)可以正确地对我的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 &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

它确实在浏览器中向我显示了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选项用于保持生成的文件。

相关内容

  • 没有找到相关文章

最新更新