2011-06-23 19 views
7

यह जानने के लिए प्रतीत नहीं होता है कि (वेब ​​निर्देशिका सेवा या वर्ग) मेरे वेब सेवा वर्ग के खिलाफ wsgen का सही तरीके से उपयोग करने के लिए कहां है ...Wsgen का उपयोग कहां करें?

नमूना दस्तावेज़ बनाएं शाब्दिक आधारित वेब सेवा:

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

ग्रहण हेलीओस का उपयोग करके, मैं स्वचालित रूप से इन दोनों फ़ाइलों को * वर्ग वर्गों के नीचे * वर्गों के रूप में बनाता हूं।

तो, फाइल सिस्टम से, मेरी प्रोजेक्ट इस तरह दिखती है:

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

मैं किस निर्देशिका में wsgen चलाऊंगा?

जब मैंने इसे अंदर की कोशिश की:

/code/jaxws_sample/src/wsgen -cp। हैलो। हैलोवर्ल्ड

प्राप्त हुआ:

 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 

यह वास्तव में मुझे ब्राउज़र में डब्लूएसडीएल दिखाता है और जब मैंने $ MyProject/वर्गों से wsgen कमांड जारी करने का प्रयास किया, तो वास्तव में यह एक जैक्सव्यू फ़ोल्डर बना रहा SayHelloResponse.class फ़ाइलें लेकिन SayHelloResponse.java फाइलें नहीं?

इसे पढ़ने के लिए समय निकालने के लिए धन्यवाद।

उत्तर

7

ऐसा लगता है कि आपको फ़ाइलों को पहले क्लास फाइलों में संकलित करना होगा और फिर उन्हें wsgen पर फ़ीड करना होगा।

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

मैं गलत हो सकता था, लेकिन मेरा मानना ​​है कि मुझे अतीत में ऐसा ही करना था।

धन्यवाद,

जेफरी केविन जिज्ञासा

+0

मैंने ऐसा किया ... ग्रहण ने संबंधित कक्षाओं को बनाया और इसे इस तरह से किया: $ MyProject/classes/wsgen -cp। हैलो.हेलोवर्ल्ड काम करता है, लेकिन यह कक्षाओं के अंदर जेनरेटेड स्टब्स रखता है। Src dir के अंदर उन्हें रखने के लिए डीडी का उपयोग कैसे कर सकता है? –

1

आप 'रखें' सक्षम करने की आवश्यकता है और आप वैकल्पिक रूप से निर्दिष्ट कर सकते हैं '-s/path/to/src' को बचाने के लिए JAXWS उत्पन्न फ़ाइलों। चूंकि ये जेनरेट की गई फाइलें हैं, इसलिए सर्वोत्तम अभ्यास आमतौर पर आपको फ़ाइलों को चारों ओर रखने और पैकेजिंग के लिए उत्पन्न करने के लिए मार्गदर्शन नहीं करता है। फ़ाइलों को रखने और शायद उन्हें संपादित करने का नकारात्मक पक्ष यह है कि यदि आप फ़ाइलों को पुन: उत्पन्न करते हैं तो आपके परिवर्तन गुम हो सकते हैं।

उदाहरण के लिए, मेरे पास एक जेएक्स-डब्लूएस एंडपॉइंट है जिसे मैवेन प्रोजेक्ट में परिभाषित किया गया है और प्रत्येक बार सर्विस पैक होने पर डब्लूएसजीईएन लक्ष्य को बुलाया जाता है।

1

आपको अपनी सेई क्लास फ़ाइल के विरुद्ध wsgen चलाने की आवश्यकता है, स्रोत फ़ाइल नहीं। src निर्देशिका में और क्लास निर्देशिका और wsgen में HelloWorld.class

0

सबसे पहले, आपको अपनी "हैलो" निर्देशिका के अंतर्गत निर्देशिका "jaxws" बनाने की आवश्यकता है।

फिर, "/ कोड/jws_sample" निर्देशिका से इस आदेश को चलाने का प्रयास करें:

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

-s आदेश जनरेटर जहां स्रोत फ़ाइलें जगह बताता है।

यह एक स्क्रिप्ट का उपयोग करके बनाया गया था जिसका उपयोग मैं यहां काम पर करता हूं और वास्तव में सबमिट करने से पहले इसका परीक्षण नहीं कर सका। हालांकि, मुझे उम्मीद है कि यह आपको कुछ दिशा देता है।

0

यह अजीब है कि आपके उत्पन्न वर्ग फ़ाइलें हैं नहीं/वर्गों/में हैलो/के रूप में अपने पैकेज कहते हैं ...

ठीक है, यह देखते हुए कि अपने वर्ग फ़ाइलों एकदम सही ढंग से /classes/hello/HelloWorld.class में है हो, आपको अपने कक्षा फ़ोल्डर से करना है:

wsgen -keep -cp। -डी -एस ../src hello.HelloWorld

बस चेक किया और मेरे लिए ठीक काम किया। Remebember, अपने कक्षा फ़ोल्डर से सीएमडी कॉल करें।

1

थोड़ा देर से जवाब लेकिन मैं दूसरों की मदद कर सकता हूं। जब आवश्यक हो तो मैं डब्ल्यूएसडीएल और एक्सएसडी उत्पन्न करने के लिए इस स्क्रिप्ट का उपयोग कर रहा हूं (केवल विंडोज़)। लिनक्स और मैक के लिए आसानी से तैयार किया जा सकता है। मैं ग्लासफ़िश ऐपसेवर की लाइब्रेरी का उपयोग कर रहा हूं। आप इन पुस्तकालयों को अपने ऐप सर्वर या बेयर libs के साथ प्रतिस्थापित कर सकते हैं।

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

-verbose विकल्प लॉग दिखाने के लिए है:

@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

यह बहुत देर हो चुकी जबाब लेकिन दूसरों के लाभ के लिए है। <> -cp विकल्प आपकी वर्तमान कार्य निर्देशिका समान नहीं है जहां .class फ़ाइलें मौजूद हैं। -s गंतव्य स्रोत फ़ाइलों के लिए है। -keep विकल्प फ़ाइलों को उत्पन्न करना है।

+0

काम नहीं करता है। अभी भी एक ही त्रुटि देता है – bademba

संबंधित मुद्दे