2010-01-25 11 views
5

मैं डब्ल्यूएस क्लाइंट जार को सीधे @Webservice क्लास (es) से उत्पन्न करने का प्रयास कर रहा हूं।स्रोत से सीधे एक वेब-सेवा क्लाइंट बनाना

के इस उदाहरण लेते हैं:

package com.example.maven.jaxws.helloservice; 
    import javax.jws.WebService; 
    @WebService 
    public class Hello { 
    public String sayHello(String param) { 
    ; return "Hello " + param; 
    } 
    } 

मैं एक युद्ध फ़ाइल उत्पन्न कर सकते हैं और glassfish का उपयोग इस वेब सेवा सेवा करने के लिए, और वहाँ से मैं ग्राहक स्रोतों उत्पन्न करने के लिए glassfish डबल्यूएसडीएल URL का उपयोग कर सकते हैं।

मैं जो करने की कोशिश कर रहा हूं वह है ग्लासफ़िश भाग को छोड़ना। webservice को परिभाषित करने वाले मेरे मेवेन प्रोजेक्ट से, मैं क्लाइंट क्लास बनाने के लिए jaxws-maven-plugin का उपयोग करना चाहता हूं लेकिन मुझे webservice के वास्तविक URL को निर्दिष्ट करने का कोई तरीका नहीं मिल रहा है।

यह सही होना चाहिए?

@see भी Creating a web-service client with a known but inaccessible wsdl

उत्तर

3

आपको सेवा के स्थान देने के लिए <wsdlLocation> विकल्प का उपयोग करना चाहिए जहां डब्लूएसडीएल फ़ाइल तैनाती के बाद उपलब्ध होगी।

-wsdlLocation का उपयोग स्विच

एक और आसान तरीका यह करने के लिए नहीं है - सिर्फ -wsdlLocation स्विच के साथ wsimport चलाने और WSDL स्थान मूल्य जो उत्पन्न सेवा वर्ग के सापेक्ष है प्रदान करते हैं और आपको इस डब्लूएसडीएल फ़ाइल को इस रिश्तेदार स्थान पर रखने के लिए की आवश्यकता है।

See the post for more details

+0

तो आप कहते हैं कि आपको पिछले रन से डब्लूएसडीएल की एक प्रति डाउनलोड करनी चाहिए। मेट्रो के लिए यह मुश्किल हो सकता है क्योंकि इसमें अतिरिक्त लुकअप शामिल हैं। –

5

एक वेब सेवा क्लाइंट अनुप्रयोग बनाना हमेशा (एक वेब सेवा प्रदाता के विकास के विपरीत) एक मौजूदा WSDL फ़ाइल के साथ शुरू होता है और, भले ही यह नहीं एक ही रास्ता है, मैं उपयोग करने के लिए सुझाव देंगे है wsimport उपकरण (अन्य विकल्पों के लिए 5 Techniques for Creating Java Web Services from WSDL देखें लेकिन मैं उन्हें कवर नहीं करूंगा)।

तो, अपने ग्राहक परियोजना में, अपने pom.xml के लिए निम्न स्निपेट शामिल:

<build> 
    <plugins> 
    <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>jaxws-maven-plugin</artifactId> 
     <executions> 
     <execution> 
      <goals> 
      <goal>wsimport</goal> 
      </goals> 
      <configuration> 
      <wsdlUrls> 
       <wsdlUrl> 
       http://localhost:8080/helloservice/HelloService?wsdl 
       </wsdlUrl> 
      </wsdlUrls> 
      <packageName>com.example.maven.jaxws.helloclient</packageName> 
      </configuration> 
     </execution> 
     </executions> 
    </plugin> 
    </plugins> 
<bulid> 

jaxws-maven-plugin:wsimport मोजो generate-sources जीवन चक्र चरण के लिए डिफ़ॉल्ट रूप से बाध्य है तो चल generate-sources के लिए किसी भी चरण पीछे jaxws:wsimport ट्रिगर किया जाएगा लक्ष्य।

ध्यान दें कि यह वास्तव में एक न्यूनतम कॉन्फ़िगरेशन है। यदि आप अधिक जानकारी/नियंत्रण चाहते हैं, तो wsimport mojo के दस्तावेज़ों की जांच करें।

उदाहरण के लिए, डबल्यूएसडीएल के लिए URL के बजाय फ़ाइलों का उपयोग करने के लिए (और किसी स्थान Maven सर्वोत्तम प्रथाओं के साथ अधिक आज्ञाकारी में जावा कोड उत्पन्न करने के लिए), उपयोग:

<configuration> 
    <sourceDestDir>${project.build.directory}/generated-sources/wsimport</sourceDestDir> 
    <wsdlDirectory>${basedir}/src/wsdl</wsdlDirectory> 
    <wsdlFiles> 
    <wsdlFile>foo.wsdl</wsdlFile> 
    <wsdlFile>bar.wsdl</wsdlFile> 
    </wsdlFiles> 
    ... 
</configuration> 

अद्यतन: एक पूर्व आह्वान करने के लिए -configured ठूंठ (WSDL से endpoint पते का उपयोग कर), कोड है:

Hello port = new HelloService().getHelloPort(); 
String result = port.sayHello("Duke!"); 

आदेश, कि समाप्ति बिंदु जिसका पता एक डबल्यूएसडीएल में निर्दिष्ट से अलग है आह्वान नई endpoint यूआरएल और QName परिभाषित करने के लिए :

URL endpoint_new = new URL("NEW_ADDRESS_HERE"); 
QName qname = new QName("http://"+"ORIGINAL_PACKAGE", "SERVICENAME"); 
Hello port = new HelloService(endpoint_new, qname).getHelloPort(); 

जहां ORIGINAL_PACKAGE पैकेज जहां सेवा में प्रकाशित है, SERVICENAME सेवा हम की जरूरत है, उदाहरण के लिए, HelloService के लिए का नाम है।

+0

यदि मैं आपके अंतिम समाधान का उपयोग करता हूं (क्लाइंट को wsdl फ़ाइल से उत्पन्न करता है), तो क्लाइंट जार में webservice का URL नहीं होगा। क्या इसे मैवेन प्रदान करने का कोई तरीका है? मैं बस टैग देखता हूं लेकिन कुछ भी नहीं ... – ben

+0

यह इतना उपयोगी था; बहुत बहुत धन्यवाद! –

+1

मेट्रो के साथ '@ वेब सेवा 'का उपयोग करते समय, डब्लूएसडीएल रनटाइम पर उत्पन्न होता है, और इसलिए संकलन समय पर शायद उपलब्ध नहीं है। –

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