SDO之創建DataObject
初學SDO ,在網上下載SDO的Sample就調試,結果走了不少彎路,就是出現IllegalArgumentException,不知是出現 什么問題,心想我也是照著例子搞的怎么就是通不過呢?于是乎跟蹤tuscany的源碼,發現Type為空。為什么呢?可能是在運行這前要把你想要創建的 DataObject的命名空間與類型的名字在文件中得注冊。于是又仔細跟蹤看到了這么一段:
XSDHelper xsdHelper = scope.getXSDHelper();
InputStream is = null;
try {
URL url = getClass().getResource("/"+fileName);
is = url.openStream();
xsdHelper.define(is, url.toString());
} catch (Exception e) {
somethingUnexpectedHasHappened(e);
} finally {
try {
is.close();
} catch (Exception e) {
somethingUnexpectedHasHappened(e);
}
}
猛然明白了。所以把例子中的xsd文件拷到項目下。再運行通過,高興呀,哈哈。下面我把例子貼出,可能也有網友跟我一樣吧,也希望其它初學SDO的網友別走我彎路。
private static final String COMPANY_GENERATED_XML = "companyGenerated.xml";
/**
* 創建類型范圍的上下文
*
* @return
*/
private HelperContext createScopeForType() {
return SDOUtil.createHelperContext();
}
/**
* 從XML計劃文件中加載類型。
*
* @param filename
*/
private void loadTypesFromXMLSchemaFile(HelperContext scope, String filename) {
XSDHelper xsdHelper = scope.getXSDHelper();
URL url = getClass().getResource("/" + filename);
InputStream is = null;
try {
is = url.openStream();
xsdHelper.define(is, url.toString());
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 組裝數據圖
*
* @param company
*/
private void populateDataGraph(DataObject company) {
company.setString("name", "aaaa");
company.setString("employeeOfTheMonth", "D001");
DataObject depts = company.createDataObject("departments");
depts.setString("name", "Advanced Technologies");
depts.setString("location", "NY");
depts.setString("number", "123");
System.out.println("Creating an employee: John Jones");
DataObject johnJones = depts.createDataObject("employees");
johnJones.setString("name", "John Jones");
johnJones.setString("SN", "E0001");
System.out.println("Creating an employee: Jane Doe");
DataObject janeDoe = depts.createDataObject("employees");
janeDoe.setString("name", "Jane Doe");
janeDoe.setString("SN", "E0003");
System.out.println("Creating a manager: Fred Bloggs");
DataObject fVarone = depts.createDataObject("employees");
fVarone.setString("name", "Fred Bloggs");
fVarone.setString("SN", "E0004");
fVarone.setString("manager", "true");
System.out.println("DataObject creation completed");
System.out.println();
System.out.println("create DataObject susseccfully");
}
public void run() {
HelperContext scope = createScopeForType();
loadTypesFromXMLSchemaFile(scope, "company.xsd");
DataObject company = scope.getDataFactory().create("company.xsd",
"CompanyType");
populateDataGraph(company);
try {
FileOutputStream fos = new FileOutputStream(COMPANY_GENERATED_XML);
try {
scope.getXMLHelper().save(company, "company.xsd", "company",
fos);
} catch (IOException e) {
e.printStackTrace();
}
String xml = scope.getXMLHelper().save(company, "company.xsd",
"company");
System.out.println(xml);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
SdoDataObject sdoDataObject = new SdoDataObject();
sdoDataObject.run();
}
}
posted on 2008-04-27 22:15 gembin 閱讀(1066) 評論(0) 編輯 收藏 所屬分類: SDO 、SOA