JAXB を使用して、おそらく MOXy を使用して、マーシャリングで基本クラスをそのサブクラスに「フラット化」して、Java 継承が XML に表示されないようにすることは可能ですか? 生成されたクラスに 1 対 1 で対応する手動で作成されたクラスが多数あります。基本クラスには XML で値がありません。
明らかでない場合は、schemagen 機能を使用しています。Java から始めて、スキーマを作成します。
JAXB を使用して、おそらく MOXy を使用して、マーシャリングで基本クラスをそのサブクラスに「フラット化」して、Java 継承が XML に表示されないようにすることは可能ですか? 生成されたクラスに 1 対 1 で対応する手動で作成されたクラスが多数あります。基本クラスには XML で値がありません。
明らかでない場合は、schemagen 機能を使用しています。Java から始めて、スキーマを作成します。
基本クラスを@XmlTransientでマークできます。
@XmlTransient
public class Root {
}
これにより、Child クラスは継承を無視します (WRT JAXB):
public class Child extends Root {
}
他の例については、次を参照してください。
フォローアップの問題
あなたがフォーラムに投稿した問題はバグです。次のようなバインディング ファイルを使用して回避できます。
binding-a.xml
バインディング ファイルで、一時クラスの型名を指定します。このタイプは、生成された XML スキーマには表示されません。
<?xml version="1.0" encoding="UTF-8"?>
<xml-bindings
xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"
package-name="example.a">
<java-types>
<java-type name="MyOwnGrandpa" xml-transient="true">
<xml-type name="MyOwnGrandpa2"/>
</java-type>
</java-types>
</xml-bindings>
example.a.MyOwnGrandpa
package example.a;
public class MyOwnGrandpa {
}
example.b.MyOwnGrandpa
package example.b;
public class MyOwnGrandpa extends example.a.MyOwnGrandpa {
}
example.Demo
package example;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.SchemaOutputResolver;
import javax.xml.transform.Result;
import javax.xml.transform.stream.StreamResult;
import org.eclipse.persistence.jaxb.JAXBContextFactory;
import example.b.MyOwnGrandpa;
public class Demo {
public static void main(String[] args) throws Exception {
Map<String, Object> properties = new HashMap<String, Object>(1);
properties.put(JAXBContextFactory.ECLIPSELINK_OXM_XML_KEY, new File("src/exanmple/a/binding-a.xml"));
JAXBContext jc = JAXBContext.newInstance(new Class[] {MyOwnGrandpa.class} , properties);
jc.generateSchema(new MySOR());
}
private static class MySOR extends SchemaOutputResolver {
@Override
public Result createOutput(String arg0, String arg1) throws IOException {
StreamResult result = new StreamResult(System.out);
result.setSystemId(arg1);
return result;
}
}
}
生成されたスキーマ
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:complexType name="myOwnGrandpa"/>
</xsd:schema>
アップデート
この問題は、EclipseLink フォーラムでも議論されています。