2010-11-22 21 views
7

क्या कोई XJC के बिना किसी JAXB स्कीमा फ़ाइल से जावा कोड उत्पन्न करने में कामयाब रहा है?गतिशील रूप से जावा स्रोत उत्पन्न करें (xjc के बिना)

JavaCompiler javaCompiler = ToolProvider.getSystemJavaCompiler() 

गतिशील मक्खी पर जावा कोड संकलन करने के लिए इस्तेमाल करने के लिए कुछ हद तक समान

नोट:, JDK 6 पर चल रहा है जिसका अर्थ है कि com.sun.* उपकरण संकुल पदावनत कर रहे हैं (संकेत के लिए धन्यवाद Blaise Doughan)

उत्तर

5

मैं काम के समाधान के लिए मेरे समाधान के लिए कुछ जे 2 ईई पुस्तकालयों को शामिल करना पड़ा क्योंकि स्टैंडअलोन जेडीके 6 xjc उपयोगिता कक्षाओं तक कोई पहुंच प्रदान नहीं करता है:

import com.sun.codemodel.*; 
import com.sun.tools.xjc.api.*; 
import org.xml.sax.InputSource; 

// Configure sources & output 
String schemaPath = "path/to/schema.xsd"; 
String outputDirectory = "schema/output/source/"; 

// Setup schema compiler 
SchemaCompiler sc = XJC.createSchemaCompiler(); 
sc.forcePackageName("com.xyz.schema.generated"); 

// Setup SAX InputSource 
File schemaFile = new File(schemaPath); 
InputSource is = new InputSource(new FileInputStream(schemaFile)); 
is.setSystemId(schemaFile.getAbsolutePath()); 

// Parse & build 
sc.parseSchema(is); 
S2JJAXBModel model = sc.bind(); 
JCodeModel jCodeModel = model.generateCode(null, null); 
jCodeModel.build(new File(outputDirectory)); 

* जावा सूत्रों outputDirectory

+0

मुझे पार्सशेमा के दौरान अपवाद था: 'java.lang.IllegalArgumentException: सिस्टम आईडी' सी: \ उपयोगकर्ता \ Federico \ दस्तावेज़ \ NetBeansProjects \ Wadl2Java \ myxsd.xsd 'पूर्ण नहीं है' क्या आप कृपया मदद कर सकते हैं? –

+1

स्थानीय फ़ाइलों के लिए मैंने निरपेक्ष पथों का उपयोग करके हल किया और सिस्टम आईडी को 'is.setSystemId (schemaFile.toURI()। ToString() के रूप में सेट किया है। –

+0

@Uccio, क्षमा करें, छुट्टी पर था, खुशी है कि आपने इस मुद्दे को हल किया है। – Osw

1

निम्नलिखित मदद मिल सकती है:

+0

धन्यवाद! क्या मुझे अतिरिक्त पैकेजों को शामिल करने की आवश्यकता है? मेरे पास com.sun.tools.xjc नहीं है। * Com.sun.tools.xjc.api। * मेरे जेडीके 6 क्लासपाथ में। जावा-वर्जन: जावा (टीएम) एसई रनटाइम पर्यावरण (1.6.0_22-बी04 का निर्माण) – Osw

+0

4.2. किसी भी उपकरण-विशिष्ट या com.sun। * एपीआई (जेडीके 6 गोद लेने गाइड) का अपहरण। http://www.oracle.com/technetwork/java/javase/adoptionguide-137484.html#4.2 – Osw

1

में रखा जाएगा JAXB संदर्भ कार्यान्वयन here प्राप्त करें।

इसमें com.sun.tools.xjc.api.XJC क्लास शामिल है जो आपको जावा कोड उत्पन्न करने की अनुमति देती है।

3

इस कोड को विशिष्ट निर्देशिकाएँ पर फ़ाइलें उत्पन्न करता है/पैकेज संरचना:

import java.io.File; 
import java.io.IOException; 

import org.xml.sax.InputSource; 

import com.sun.codemodel.JCodeModel; 
import com.sun.tools.xjc.api.S2JJAXBModel; 
import com.sun.tools.xjc.api.SchemaCompiler; 
import com.sun.tools.xjc.api.XJC; 

public class JAXCodeGen { 
    public static void main(String[] args) throws IOException { 

      String outputDirectory = "E:/HEAD/JAXB/src/"; 

      // Setup schema compiler 
      SchemaCompiler sc = XJC.createSchemaCompiler(); 
      sc.forcePackageName("com.xyz.schema"); 

      // Setup SAX InputSource 
      File schemaFile = new File("Item.xsd"); 
      InputSource is = new InputSource(schemaFile.toURI().toString()); 
      // is.setSystemId(schemaFile.getAbsolutePath()); 

      // Parse & build 
      sc.parseSchema(is); 
      S2JJAXBModel model = sc.bind(); 
      JCodeModel jCodeModel = model.generateCode(null, null); 
      jCodeModel.build(new File(outputDirectory)); 

    } 
} 
0

Maven में निर्भरता होने का एक और तरीका है;

<dependency> 
     <groupId>org.glassfish.jaxb</groupId> 
     <artifactId>jaxb-xjc</artifactId> 
     <version>2.2.11</version> 
    </dependency> 
संबंधित मुद्दे