6

XCCDFSchemaLocationから取得できる標準スキーマであるxccdf-1.1.4.xsdのJAXBバインディングを作成しようとしています

現在、JAXB実装としてEclipseLink MOXyを使用しています。これは、JSONバインディングも生成できるという事実が気に入っているためです。

外部バインディングXMLを使用して、悪名高い「[ERROR]プロパティ「value」はすでに定義されています」エラーが発生する場合がありましたが、エラーが発生しました。

[ERROR] Property "Any" is already defined. Use <jaxb:property> to resolve this conflict.
line 441 of file:/home/dchu/Playground/Java/eclipselink_moxy/xccdf_1.1.4/xccdf-1.1.4.xsd

[ERROR] The following location is relevant to the above error
line 444 of file:/home/dchu/Playground/Java/eclipselink_moxy/xccdf_1.1.4/xccdf-1.1.4.xs

以下は、エラーが発生したXMLスキーマの行の抜粋です。

<xsd:sequence>
    <xsd:choice minOccurs="1" maxOccurs="1">
      <xsd:any namespace="http://purl.org/dc/elements/1.1/"
               minOccurs="1" maxOccurs="unbounded"/>
      <xsd:any namespace="http://checklists.nist.gov/sccf/0.1"
               processContents="skip" 
               minOccurs="1" maxOccurs="unbounded"/>
    </xsd:choice>
</xsd:sequence>

ここで何が間違っているのか誰かが知っていますか?ありがとう!

4

3 に答える 3

15

外部バインディングファイルを使用して、任意のプロパティの1つに名前を変更できます。

binding.xml

<jxb:bindings xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:jxb="http://java.sun.com/xml/ns/jaxb" version="2.1">

    <jxb:bindings schemaLocation="schema.xsd">
        <jxb:bindings
            node="//xsd:complexType[@name='foo']/xsd:sequence/xsd:choice/xsd:any[@namespace='http://checklists.nist.gov/sccf/0.1']">
            <jxb:property name="any2" />
        </jxb:bindings>
    </jxb:bindings>

</jxb:bindings>

XMLスキーマ(schema.xsd)

以下は、XMLスキーマの簡略化されたバージョンです。

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.example.org/schema" 
    xmlns="http://www.example.org/schema"
    elementFormDefault="qualified">

    <xsd:complexType name="foo">
        <xsd:sequence>
            <xsd:choice minOccurs="1" maxOccurs="1">
                <xsd:any namespace=""
                    minOccurs="1" maxOccurs="unbounded" />
                <xsd:any namespace="http://checklists.nist.gov/sccf/0.1"
                    processContents="skip" minOccurs="1" maxOccurs="unbounded" />
            </xsd:choice>
        </xsd:sequence>
    </xsd:complexType>

</xsd:schema>

XJCコール

以下は、外部バインディングファイルを利用するXJC呼び出しを行う方法です。

xjc -b binding.xml schema.xsd

生成されたクラス(Foo)

package org.example.schema;

import java.util.*;
import javax.xml.bind.annotation.*;
import org.w3c.dom.Element;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "foo", propOrder = {
    "any",
    "any2"
})
public class Foo {

    @XmlAnyElement(lax = true)
    protected List<Object> any;
    @XmlAnyElement
    protected List<Element> any2;


    public List<Object> getAny() {
        if (any == null) {
            any = new ArrayList<Object>();
        }
        return this.any;
    }

    public List<Element> getAny2() {
        if (any2 == null) {
            any2 = new ArrayList<Element>();
        }
        return this.any2;
    }

}
于 2012-11-28T18:17:00.100 に答える
1

Blaiseの提案を使用してJAXB外部バインディングXMLを作成すると、JAVAJAXB実装を使用してJAXBバインディングを生成するときに機能します。

ただし、EclipseLinkMOXyjaxb-compiler.shを使用している場合は機能しません。Blaiseは、コンパイラスクリプトのバグの可能性があると述べました。バグチケット395328

今のところ、この問題の回避策は、JDKからJAVA XJCコマンドを使用し、生成されたディレクトリにjaxb.propertiesファイルを手動で追加することです。指定-eclipselink-moxy-as-yours

于 2012-11-28T19:40:49.720 に答える
1

Eclipseを使用しているときにこれらすべてのソリューションを試しましたが、実際には役に立ちませんでした。そこで、Netbeansに切り替えました。これにより、ダイアログボックスにほぼ同じエラーメッセージが表示されますが、詳細が少なくなり、同じエラーが発生しました。

これがすばらしい部分です。Netbeansはクライアントサービスを作成します。はい、そのエラーメッセージが表示されます。

次のようにWebサービスクライアントを作成できます
。1。プロジェクトを右クリックします
。2。新規
3.Webサービスクライアント
4.WSDLURLを選択し、URLを貼り付けます
。5。[完了]をクリックすると、エラーのあるクライアントが作成されます。

そこで、生成されたWSDLファイルをプロジェクト内に配置し、ファイル内の「any」の出現箇所を検索し、同じタグ内のファイル内の1秒ごとの出現箇所にコメントを付けました。

コメント行番号216

同じタグ内の2番目の出現すべてについてコメントした後、ファイルを保存します。Webサービスを右クリックし(最初に[Webサービス参照]を展開)、[更新]をクリックします。また、メソッドをドラッグアンドドロップしてパラメータを使用して呼び出すだけで、Webサービスクライアントを実行できます。

それは私のために働いた...

于 2019-05-23T10:32:26.023 に答える