誰かがXJCなしでJAXBスキーマファイルからJavaコードを生成できましたか?動的にオンザフライでJavaコードをコンパイルするために使用Javaソースを動的に生成する(xjcなし)
JavaCompiler javaCompiler = ToolProvider.getSystemJavaCompiler()
に幾分類似
。
注:com.sun.*
ツールパッケージがに廃止されていることを意味し、JDK 6で実行している(おかげでヒントのBlaise Doughan)
誰かがXJCなしでJAXBスキーマファイルからJavaコードを生成できましたか?動的にオンザフライでJavaコードをコンパイルするために使用Javaソースを動的に生成する(xjcなし)
JavaCompiler javaCompiler = ToolProvider.getSystemJavaCompiler()
に幾分類似
。
注:com.sun.*
ツールパッケージがに廃止されていることを意味し、JDK 6で実行している(おかげでヒントのBlaise Doughan)
IスタンドアロンのJDK 6がxjcユーティリティクラスへのアクセスを提供しないため、私のソリューションが動作するためのいくつかのJ2EEライブラリを含める必要がありました。
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));
*の.javaソースは、JAXBリファレンス実装hereを取得OUTPUTDIRECTORY
以下が役立つことがあります。
に配置されます。
Javaコードを生成するためのcom.sun.tools.xjc.api.XJCクラスが含まれています。
このコードは、特定のディレクトリにファイルを生成/パッケージ構造:
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));
}
}
Mavenの中の依存関係を取得する別の方法。
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-xjc</artifactId>
<version>2.2.11</version>
</dependency>
parseSchema中に例外がありました。java.lang.IllegalArgumentException:システムID 'C:\ Users \ Federico \ Documents \ NetBeansProjects \ Wadl2Java \ myxsd.xsdは絶対的ではありません。どうすればよろしいですか? –
ローカルファイルの場合、絶対パスを使用してシステムIDを 'is.setSystemId(schemaFile.toURI()。toString()) 'と設定して解決しました。 –
@Uccioは、休暇中でした。 – Osw