JAXB を使用して単純な XML (CSDL のサブセット) をアンマーシャリングしているときに問題が発生しました。
誰かが過去に私を支援しようとしましたが (ここ)、部分的に機能しており、どうすればよいかわかりません...
次の XML を検討してください:
<edmx:Edmx xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx">
<edmx:DataServices xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" m:DataServiceVersion="3.0">
<Schema xmlns:cg="http://schemas.microsoft.com/ado/2006/04/codegeneration" xmlns:sap="http://www.sap.com/Protocols/SAPData" xmlns="http://schemas.microsoft.com/ado/2009/11/edm" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" Namespace="myNS">
</Schema>
</edmx:DataServices>
</edmx:Edmx>
私が言われたように、(同じパッケージ内に)次のようなpackage-info.javaファイルがあります。
@XmlSchema(
namespace="http://schemas.microsoft.com/ado/2007/06/edmx",
elementFormDefault=XmlNsForm.QUALIFIED,
xmlns={
@XmlNs(prefix="edmx", namespaceURI="http://schemas.microsoft.com/ado/2007/06/edmx"),
@XmlNs(prefix="", namespaceURI="http://schemas.microsoft.com/ado/2009/11/edm"),
@XmlNs(prefix="m", namespaceURI="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata")
}
)
@XmlAccessorType(XmlAccessType.FIELD)
package com.sap.ndb.studio.rdl.csdlparser.jaxb.objects;
import javax.xml.bind.annotation.*;
さらに、次のデータ構造があります:
Edmx.java
package com.sap.ndb.studio.rdl.csdlparser.jaxb.objects;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "Edmx")
public class Edmx {
@XmlElement(name = "DataServices")
private DataService dataService;
public DataService getDataService() {
return dataService;
}
}
DataService.java
package com.sap.ndb.studio.rdl.csdlparser.jaxb.objects;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class DataService {
@XmlElement(name = "Schema")
private Schema schema;
@XmlAttribute(name = "DataServiceVersion")
private double version;
public Schema getSchema() {
return schema;
}
}
スキーマ.java
package com.sap.ndb.studio.rdl.csdlparser.jaxb.objects;
@XmlRootElement
public class Schema {
....
}
注意: Schema.java には、XML に関連しない実装がいくつかあるため、削除しました (内部ロジック)。
JAXB を使用して XML をアンマーシャリングした後、返された Edmx オブジェクトには、'schema' メンバーと 'version' メンバーの両方に null 値が含まれていますが、package-info.java ですべての xmlns パラメーターについて言及しました。
誰?:(