2014-12-04 4 views
7

के साथ वेबलॉगिक में कोई स्कीमा आयात नहीं है, मैं आयात घोषणा के बजाए एक एकल डब्लूएसडीएल फ़ाइल घोषणा के अंदर ऑब्जेक्ट स्कीमा को शामिल करने के लिए जेएक्स-डब्ल्यूएस का उपयोग करके वेबलॉगिक 10.3.6 द्वारा उत्पन्न वेब सेवा को कैसे कॉन्फ़िगर कर सकता हूं?एकल डब्लूएसडीएल जेएक्स-डब्ल्यूएस

उदाहरण कोड:

इंटरफ़ेस

import javax.ejb.Local; 

@Local 
public interface CustomerBeanLocal { 

    public void updateCustomer(Customer customer); 

} 

सत्र बीन

import javax.ejb.Stateless; 
import javax.jws.WebService; 

@Stateless 
@WebService 
public class CustomerBean implements CustomerBeanLocal { 

    @Override 
    public void updateCustomer(Customer customer) { 
     // Do stuff... 
    } 

} 

जनरेट किया डबल्यूएसडीएल

हमें स्कीमा परिभाषाओं को नीचे दिए गए उदाहरण में <xsd:import> टैग के साथ आयात नहीं किया जाना चाहिए, लेकिन डब्ल्यूएसडीएल के अंदर घोषित किया जाना चाहिए, जिसका अर्थ है कि सभी अनुबंध जानकारी एक डब्लूएसडीएल फ़ाइल में है। अन्य फाइलों की कोई निर्भरता नहीं।

<!-- ... --> 

<types> 
    <xsd:schema> 
    <xsd:import namespace="http://mybeans/" schemaLocation="http://192.168.10.1:7001/CustomerBean/CustomerBeanService?xsd=1" /> 
    </xsd:schema> 
</types> 

<!-- ... --> 

वाइल्डफली के साथ एक ही कोड में डब्ल्यूएसडीएल के अंदर स्कीमा प्रकार शामिल हैं, और आयात सुविधा का उपयोग नहीं करते हैं। कुछ शोध के बाद मुझे वेबलॉगिक में इसे करने के लिए बीन/सर्वर को कॉन्फ़िगर करने का कोई तरीका नहीं मिला (इसे करने के लिए जेएक्स-डब्ल्यूएस या वेबलॉगिक स्वामित्व वाली विशेषताएं नहीं मिलीं)।

मैं एक निर्यातित स्कीमा (पुन: प्रयोज्यता, आदि) के लाभों को समझता हूं लेकिन यह परियोजना की एक आवश्यकता है कि प्रकारों को डब्ल्यूएसडीएल के अंदर घोषित किया जाना चाहिए, आयात नहीं किया जाना चाहिए।

+0

यह एक ऐसी ही सवाल का एक बहुत अच्छा जवाब है: http://stackoverflow.com/questions/16030574/jax-ws-has-xsd-schema-in-different-url –

+0

मैं मैनुअल हस्तक्षेप की बचत कर रहा हूँ एक अंतिम संसाधन के रूप में। इसे कॉन्फ़िगर करने का एक तरीका होना चाहिए (यहां तक ​​कि एक गैर पोर्टेबल सुविधा के साथ)। यदि मैन्युअल संस्करण वेबलॉगिक का एकमात्र विकल्प है, तो मैं शायद अनुबंध-पहली पीढ़ी के लिए जाऊंगा। – BonanzaOne

उत्तर

2

क्या आप wsdl-generation के लिए प्रदत्त wsgen-tool का उपयोग करते हैं? यदि हां, तो एक पैरामीटर कहा जाता है:

-inlineSchemas 

जो वास्तव में आप चाहते हैं जो करता है।

"एक उत्पन्न wsdl में स्कीमा इनलाइन करने के लिए प्रयुक्त -wsdl विकल्प के साथ संयोजन के रूप में इस्तेमाल किया जाना चाहिए।।" (स्रोत: https://jax-ws.java.net/nonav/2.2.1/docs/wsgen.html)

+1

मुझे सर्वर में जेएक्स-बी और जेएक्स-डब्ल्यूएस एनोटेटेड पीओजेओ की तैनाती के बाद यूआरएल से अपना डब्लूएसडीएल मिलता है, जो पूर्ण सेवा यूआरएल के बाद "डब्ल्यूएसडीएल" टेक्स्ट जोड़ता है। डब्ल्यूएसडीएल रनटाइम पर उत्पन्न होता है। क्या आप इनलाइन स्कीमा जेनरेट करने के लिए रनटाइम को बता सकते हैं? जैसे ही मैं कर सकता हूं (सप्ताहांत) मैं आपके सुझाव को भी देखूंगा। – BonanzaOne

+0

वेबलॉगिक द्वारा उत्पन्न WSDL फ़ाइल की जांच करके मैं देख सकता हूं कि यह WSGEN ** 2.1.5 ** का उपयोग करता है (फ़ाइल के अंदर एक टिप्पणी है)।चूंकि '-इनलाइनशैमा' स्विच [2.2.1 रिलीज द्वारा प्रस्तुत किया गया था] (https://jax-ws.java.net/nonav/2.2.1/docs/changelog.html), निष्कर्ष यह है कि संस्करण पर वेबलॉगिक 10.3.6 ऐसा करने में सक्षम नहीं है। मैं WSGEN के हाल के संस्करण का उपयोग कर कंटेनर के बाहर डब्ल्यूएसडीएल उत्पन्न करूंगा। धन्यवाद। – BonanzaOne

+0

आपका स्वागत है :-) –

0

आप wsgen jaxws-maven-plugin साथ स्वचालित कर सकते हैं। प्लगइन का नवीनतम संस्करण jaxws 2.2 का उपयोग करता है लेकिन यदि आप target 2.1 निर्दिष्ट करते हैं, तो जेनरेट किए गए कलाकृतियों को आपके प्लेटफ़ॉर्म के साथ संगत किया जाएगा।

<plugin> 
    <groupId>org.jvnet.jax-ws-commons</groupId> 
    <artifactId>jaxws-maven-plugin</artifactId> 
    <version>2.3</version> 
    <executions> 
     <execution> 
     <id>wsgen</id> 
     <phase>process-classes</phase> 
     <goals> 
      <goal>wsgen</goal> 
     </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <sei>...put your WS impl class here...</sei> 
     <keep>true</keep> 
     <verbose>true</verbose> 
     <target>2.1<verbose> 
     <genWsdl>true</genWsdl> 
     <xnocompile>true</xnocompile> 
     <inlineSchemas>true</inlineSchemas> 
    </configuration> 
    </plugin> 

पैकेज (वेब-INF/wsdl तहत डिफ़ॉल्ट रूप से) अपने युद्ध फ़ाइल में उत्पन्न WSDL फ़ाइल और उसके बाद आपकी टिप्पणियों में wsdlLocation जोड़ें।

@WebService(wsdlLocation = 'MyService.wsdl') 
संबंधित मुद्दे