2011-06-23 20 views
7

Đừng dường như không biết nơi (những gì thư mục - nguồn hoặc lớp) để đúng cách sử dụng wsgen chống lại lớp WebService tôi ...Nơi sử dụng wsgen?

Tạo một tài liệu mẫu đen dựa WebService:

package hello; 

import javax.jws.WebService; 

@WebService 
public class HelloWorld { 

public void sayHello() { 
     System.out.println("Welcome to JAX-WS 2!"); 
    } 
} 

Created nhà xuất bản như thế này:

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()); 
    } 
} 

Sử dụng Eclipse Helios, tôi tự động tạo cả hai tệp này dưới dạng * .classes bên dưới thư mục lớp tương ứng.

Vì vậy, từ hệ thống tập tin, dự án của tôi trông như thế này:

/code/jws_sample 
      | 
      src 
      | 
       hello 
        | 
        HelloWorld.java 
        Publisher.java 
      | 
      classes 
        | 
        HelloWorld.class 
        Publisher.class 

Trong đó thư mục tôi sẽ chạy wsgen?

Khi tôi thử bên trong:

/code/jaxws_sample/src/wsgen -cp. hello.HelloWorld

đã nhận:

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 

Nó thực sự không chỉ cho tôi các WSDL trong trình duyệt và cũng có khi tôi đã cố gắng để thực hiện lệnh wsgen từ $ MyProject/classes nó thực sự đã tạo ra một thư mục jaxws với Tệp SayHelloResponse.class nhưng không phải tệp SayHelloResponse.java?

Cảm ơn bạn đã dành thời gian đọc nội dung này.

Trả lời

7

Dường như bạn phải biên dịch các tệp thành tệp lớp trước và sau đó cho chúng vào wsgen.

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

Tôi có thể sai, nhưng tôi tin rằng tôi phải làm tương tự trong quá khứ.

Cảm ơn,

Jeffrey Kevin Pry

+0

Tôi đã làm điều đó ... Eclipse đã tạo ra các lớp thư mục tương ứng và làm như sau: $ MyProject/classes/wsgen -cp. hello.HelloWorld làm việc, nhưng nó đặt các stubs được tạo ra bên trong thư mục classes. Làm thế nào người ta có thể sử dụng -d để đặt chúng bên trong thư mục src? –

1

Bạn cần phải bật '-keep' và bạn có thể tùy chọn chỉ định '-s/path/to/src' để lưu các tập tin được tạo jaxws. Vì đây là những tập tin được tạo ra, thực hành tốt nhất thường hướng dẫn bạn không giữ các tập tin xung quanh và chỉ tạo ra chúng để đóng gói. Nhược điểm của việc giữ các tập tin và có lẽ chỉnh sửa chúng là nếu bạn tái tạo các tập tin thay đổi của bạn có thể bị mất.

Ví dụ, tôi có điểm cuối JAX-WS được xác định trong dự án Maven và mục tiêu WSGEN được gọi mỗi lần dịch vụ được đóng gói.

1

bạn cần chạy wsgen đối với tệp lớp sei của bạn chứ không phải tệp nguồn. cd ra khỏi thư mục src và vào thư mục lớp và wsgen chống lại HelloWorld.class

0

Trước tiên, bạn cần phải tạo thư mục "jaxws" trong thư mục "hello" của bạn.

Sau đó, hãy thử chạy lệnh này từ thư mục "/ code/jws_sample":

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

Lệnh -s nói với các máy phát điện nơi để đặt các tập tin nguồn.

Điều này được tạo bằng tập lệnh tôi sử dụng tại đây tại cơ quan và không thể thực sự kiểm tra điều này trước khi gửi. Tuy nhiên, tôi hy vọng điều này sẽ cho bạn một số hướng.

0

Đó là lạ mà các file lớp tạo của bạn đang không ở trong/classes/hello/như gói của bạn nói ...

Vâng, xem xét rằng các tập tin lớp học của bạn IS trong /classes/hello/HelloWorld.class như mong muốn được, tất cả các bạn phải làm từ thư mục lớp học của bạn là:

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

Chỉ cần kiểm tra và làm việc tốt cho tôi. Hãy nhớ lại, gọi CMD từ thư mục lớp học của bạn.

1

Câu trả lời trễ một chút nhưng tôi có thể giúp người khác. Tôi đang sử dụng tập lệnh này để tạo WSDL và XSD khi được yêu cầu (Chỉ dành cho Windows). Có thể dễ dàng chuẩn bị cho Linux và Mac. Tôi đang sử dụng thư viện của các ứng dụng thủy tinh. Bạn có thể thay thế các thư viện này bằng máy chủ ứng dụng của bạn hoặc thư viện trống.

@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 
0

Đây là câu trả lời rất muộn nhưng vì lợi ích của người khác:

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

Các -verbose lựa chọn là để hiển thị các bản ghi. <> Tùy chọn -cp trong trường hợp thư mục làm việc hiện tại của bạn không giống với tệp .class. -s là dành cho tệp nguồn đích. Tùy chọn -keep là tiếp tục tạo các tệp.

+0

không hoạt động. Vẫn cho cùng một lỗi – bademba

Các vấn đề liên quan