0

jaxb のほぼ初心者で、xjc (jdk 8) を使用して PLMXMLSchema.xsd を Java クラスにバインドしようとしています。

これはスキーマの抜粋です

<xsd:complexType name="ProductType">
<xsd:annotation>
  <xsd:documentation>
  This is the revision-independent Product, derived from Structure.
  It corresponds to the STEP 'product'.
  
  Attributes:
  
  productId:        The identifier of the Product, unique in some context, e.g. an 
                    Organisation.
  alternateForRef:  An 'alternate' Product is one which is substitutable, in all 
                    contexts, for a particular Product. If this is an 'alternate'
                    Product, then this attribute references the Product for which
                    this is an alternate.
  unitRef:          The default Unit for the 'quantity' attribute of any referencing
                    ProductInstance elements.
  designRequired:   true if all the revisions of this Product must have
                    at least one associated DesignRevision
  source:           whether the Product is manufactured or bought-in
  vendorRef:        References the Vendor when the Product represents a
                    vendor part.
  </xsd:documentation>
</xsd:annotation>
<xsd:complexContent>
  <xsd:extension base="plm:StructureBase">
    <xsd:attribute name="productId" type="xsd:string" use="optional"/>
    <xsd:attribute name="alternateForRef" type="plm:anyURIType" use="optional" plm:refType="plm:Product"/>
    <xsd:attribute name="unitRef" type="plm:anyURIType" use="optional" plm:refType="plm:Unit"/>
    <xsd:attribute name="designRequired" type="xsd:boolean" default="true"/>
    <xsd:attribute name="source" type="plm:ProductSourceEnum" use="optional"/>
    <xsd:attribute name="vendorRef" type="plm:anyURIType" use="optional" plm:refType="plm:Vendor"/>
  </xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="Product" type="plm:ProductType" substitutionGroup="plm:Structure"/>

最初のポイント

xjc コンパイラがクラスをビルドしますProductType.javaが、私はそれを好みProduct.javaます。これは一例にすぎません。スキーマでは一貫して「FooType」という命名規則に「Type」サフィックスを付けて使用しているため、私は削除したいと考えています。ここで提案されているように「単純な」バインディングを使用するhttps://stackoverflow.com/a/4818344/2668213効果がないようです..

2 点目

スキーマ内の属性

<xsd:attribute name="alternateForRef" type="plm:anyURIType" use="optional" plm:refType="plm:Product"/>

に翻訳されます

@XmlAttribute(name = "alternateForRef")
protected String alternateForRef;

しかし、私は大いに好むだろう

@XmlAttribute(name = "alternateForRef")
@XmlIDREF
protected Product alternateForRef;

このパターンは、一部の属性がplm:refTypeクラスへの idref であるスキーマに一貫して適用されます。したがって、これらすべてのケースに一度に対処するための (外部バインディング?) ソリューションがあることを願っています。

4

0 に答える 0