私はjaxbにEclipseLink動的moxyを使用しています。列挙値を設定しようとすると、ClassNotFound 例外が発生します。誰かが私が間違っていることを指摘できますか?
スキーマ:
<xs:element name="customer" type="customerType"> </xs:element>
<xs:complexType name="customerType">
<xs:sequence>
<xs:element name="number" type="numberEnum"/>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="numberEnum">
<xs:restriction base="xs:string">
<xs:enumeration value="1"/>
<xs:enumeration value="2"/>
<xs:enumeration value="3"/>
</xs:restriction>
</xs:simpleType>
Java コード:
package uic;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import javax.xml.bind.JAXBException;
import org.eclipse.persistence.dynamic.DynamicEntity;
import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext;
import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContextFactory;
public class test{
DynamicJAXBContext context;
test() {
try{
context = DynamicJAXBContextFactory.createContextFromXSD(new FileInputStream(new File("sample/NewXMLSchema1.xsd")), null, null, null);
} catch(JAXBException e) {
e.printStackTrace();
} catch(FileNotFoundException e){
e.printStackTrace();
}
DynamicEntity root = context.newDynamicEntity("CustomerType");
root.set("name", "tom");
Object enumValue = null;
try {
enumValue = context.getEnumConstant("uic.NumberEnum", "2");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JAXBException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
root.set("Number", enumValue);
}
public static void main(String args[]) {
new test();
}
}
createContextFromXSD() を使用してコンテキストを作成するとうまくいきませんか? 私は次の例に従いました:列挙値にアクセスする EclipseLink 動的 MOXy
他の JAXB 生成クラスにアクセスしているときは問題ありません。問題は enum クラスのみです。それらは、他の生成されたクラスなどとは別のパッケージに配置されていますか?
編集: メイン プログラムでは、入力として xml スキーマ ファイルを受け取ります。xsom パーサーを使用して要素と型の宣言を取得し、JAXB で生成されたクラスを使用してマーシャリングして、出力 (XML ファイル) を取得します。そのため、スキーマに必要な変更はすべて動的に行う必要があります。
ありがとう。