Где использовать wsgen? - PullRequest
7 голосов
/ 24 июня 2011

Кажется, я не знаю, где (какой каталог - источник или классы) правильно использовать wsgen против моего класса WebService ...

Создание образца документа на основе литерала 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 &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 в браузере, а также, когда я пытался выполнить команду wsgen из $ MyProject / classes, он фактически создал папку jaxws с файлами SayHelloResponse.class, но не с файлами SayHelloResponse.java?

Спасибо, что нашли время, чтобы прочитать это.

Ответы [ 7 ]

7 голосов
/ 24 июня 2011

Похоже, вы должны сначала скомпилировать файлы в файлы классов, а затем передать их в wsgen.

classpath <path>          specify where to find input **class files**

Я могу ошибаться, но я считаю, что в прошлом мне приходилось делать то же самое.

Спасибо

Джеффри Кевин Прай

1 голос
/ 14 июня 2013

Немного поздно, но я могу помочь другим. Я использую этот скрипт для генерации 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
1 голос
/ 27 февраля 2012

вам нужно запустить wsgen для вашего файла класса sei, а не исходного файла.cd из каталога src и в каталог классов и wsgen против HelloWorld.class

1 голос
/ 01 июля 2011

Вам нужно включить '-keep', и вы можете дополнительно указать '-s / path / to / src', чтобы сохранить сгенерированные файлы JAXWS. Поскольку это сгенерированные файлы, передовой опыт обычно подсказывает не хранить файлы и генерировать их только для упаковки. Недостатком хранения файлов и, возможно, их редактирования является то, что если вы восстановите файлы, ваши изменения могут быть потеряны.

Например, у меня есть конечная точка JAX-WS, определенная в проекте Maven, и цель WSGEN вызывается при каждой упаковке службы.

0 голосов
/ 16 августа 2016

Это очень поздний ответ, но в интересах других:

wsgen -verbose -keep -cp <folder with .class files> hello.HelloWorld -s <folder where u want the generated artifacts>

Опция -verbose предназначена для отображения журналов. <> Параметр -cp используется в том случае, если ваш текущий рабочий каталог не совпадает с тем, где присутствуют файлы .class. -s для исходных файлов назначения. Опция -keep предназначена для сохранения сгенерированных файлов.

0 голосов
/ 13 апреля 2013

Странно, что ваши сгенерированные файлы классов не находятся в / classes / hello /, как говорит ваш пакет ...

Что ж, учитывая, что ваши файлы классов находятся в /classes/hello/HelloWorld.class, так какдолжно быть, все, что вам нужно сделать из папки классов :

wsgen -keep -cp.-д-s ../src hello.HelloWorld

Только что проверил и работал нормально для меня.Помните, вызовите CMD из папки ваших классов .

0 голосов
/ 19 марта 2012

Сначала вам нужно создать каталог "jaxws" в вашем каталоге "hello".

Затем попробуйте запустить эту команду из каталога "/ code / jws_sample":

wsgen -keep -cp classes/ -s src/ HelloWorld

Команда -s сообщает генератору, где разместить исходные файлы.

Это было создано с использованием скрипта, который я использую здесь на работе, и не смог проверить это перед отправкой. Тем не менее, я надеюсь, что это дает вам некоторое направление.

...