今日、私には解決できない気が遠くなるような人がいます。説明と例から始めます。
2つのXSDファイルがあります。1つのXSDファイルは、他の要素の1つを参照します。
最初のXSD-ReportInfo.xsd:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<xs:schema id="ReportInfoWrapper" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="ReportInfoWrapper" >
<xs:complexType>
<xs:sequence>
...
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
2番目のXSD-ReportInfoRecordSet.xsd:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<xs:schema id="ReportInfoRecordSetWrapper" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:include schemaLocation="./ReportInfo.xsd" />
<xs:element name="ReportInfoRecordSetWrapper">
<xs:complexType>
<xs:sequence>
<xs:element ref="ReportInfoWrapper" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
ReportInfoRecordSetは、ReportInfoWrapper(ReportInfoのルート要素)を参照します。ReportInfoRecordSetでこの参照される要素の生成された名前を変更するには、JAXBBindingsファイルで何を定義するかを知る必要があります。これは現在生成されているものです:
public class ReportInfoRecordSetWrapper {
@XmlElement(name = "ReportInfoWrapper", required = true)
protected List<ReportInfoWrapper> reportInfoWrappers; //I need to change the name here in the bindings file.
質問 どんな助けやアドバイスも大いに感謝するでしょう。ReportInfoの現在のバインディングファイルが破損するため、ReportInfoのルート要素を複雑なタイプにすることはできません。次の表記で変数の名前を定義する方法はありますか?以下のこの例は、何らかの理由で機能しないことに注意してください(ノードターゲティングの問題があると思います)。
<jaxb:bindings node=".//xsd:element[@name='ReportInfoRecordSetWrapper']/xsd:complexType/xsd:sequence/xsd:node[@ref=ReportInfoWrapper"]">
<jaxb:property name="records" />
</jaxb:bindings>
ノート
私がここで何をしようとしているのかを簡単に確認する方法は、通常の開発用語で説明できます。
ReportInfoは「クラス」です
ReportInfoRecordSetは、ReportInfoクラスの配列です。
編集
<jaxb:bindings
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:inheritance="http://jaxb2-commons.dev.java.net/basic/inheritance"
xmlns:annox="http://annox.dev.java.net"
jaxb:extensionBindingPrefixes="xjc inheritance annox"
version="2.1">
<jaxb:globalBindings localScoping="toplevel">
<xjc:simple />
<xjc:javaType adapter="aem.adservices.google.dfa.utils.DateAdapter" name="java.util.Calendar" xmlType="xs:dateTime" />
</jaxb:globalBindings>
<jaxb:bindings schemaLocation="../xsd/ReportInfoRecordSet.xsd" >
<jaxb:bindings node=".//xsd:element[@name='ReportInfoRecordSetWrapper']/xsd:complexType">
<annox:annotate>
<annox:annotate annox:class="aem.utilities.boomi.BoomiObject" label="ReportInfoRecordSet" description="ReportInfoRecordSet" OperationTypes="UPSERT" />
</annox:annotate>
</jaxb:bindings>
<jaxb:bindings node="//*/xs:element[@ref='ReportInfoWrapper']">
<jaxb:property name="records"/>
</jaxb:bindings>
</jaxb:bindings>
</jaxb:bindings>
エラーは19行目でXPATHエラー:nullを示してスローされます。19〜21行目は、コードに追加された新しい行です。
編集2
子供を覚えておいてください。XJCを使用するには、XPATHプロセッサに提供する名前空間を再確認する必要があります。node="//*/xs:element[@ref='ReportInfoWrapper']"
どこにあるべきか 間違いを見つけたnode="//*/xsd:element[@ref='ReportInfoWrapper']"