2

jaxb-implでは、xmlメタデータから適切なJavaリフレクションデータにマップするために使用できるRuntimeTypeInfoSetオブジェクトを取得できます。モクシーに相当するものは何ですか。

更新:私のユースケースは、要素名にマップするプロパティを見つけることです。もちろん、Javaリフレクションを使用してそれを行うことはできますが、面倒です。

4

1 に答える 1

2

注: 私はEclipseLink JAXB(MOXy)のリーダーであり、JAXB 2(JSR-222)エキスパートグループのメンバーです。

EclipseLink JAXB(MOXy)には、次のクラスに直接相当するものはありません。

  • com.sun.xml.bind.v2.model.runtime.RuntimeTypeInfoSet

このクラスの目的は、特定のモデルのJAXBマッピングメタデータをイントロスペクトする手段を提供することであるように思われます。この機能をMOXyに追加するために、次の拡張リクエストを開きました。

メタデータを表すためにMOXyがカバーの下に保持するネイティブオブジェクト(、、、および)のセットがありProjectますDescriptorMappingあなたが探しているものを示すためにあなたの質問を拡大することができれば、私はあなたがそれを見つけるのを手伝うことができます。


アップデート

更新:私のユースケースは、要素名にマップするプロパティを見つけることです。もちろん、Javaリフレクションを使用してそれを行うことはできますが、面倒です。

返信が遅れたことをお詫び申し上げます。あなたの質問がより多くの情報で更新されていることに気づいていませんでした:

お客様

last-nameクラスを使用して、要素に対応するプロパティ名を取得します。

package forum9992419;

import javax.xml.bind.annotation.*;

@XmlRootElement
public class Customer {

    private String firstName;
    private String lastName;

    @XmlElement(name="first-name")
    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    @XmlElement(name="last-name")
    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

}

デモ

package forum9992419;

import javax.xml.bind.JAXBContext;

import org.eclipse.persistence.descriptors.ClassDescriptor;
import org.eclipse.persistence.internal.sessions.AbstractSession;
import org.eclipse.persistence.jaxb.JAXBHelper;
import org.eclipse.persistence.mappings.DatabaseMapping;
import org.eclipse.persistence.oxm.XMLField;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Customer.class);

        AbstractSession session = JAXBHelper.getJAXBContext(jc).getXMLContext().getSession(Customer.class);
        ClassDescriptor descriptor = session.getClassDescriptor(Customer.class);
        XMLField xmlField = new XMLField("last-name/text()");
        DatabaseMapping mapping = descriptor.getObjectBuilder().getMappingForField(xmlField);
        System.out.println(mapping.getAttributeName());
    }

}

出力

lastName
于 2012-04-03T14:34:22.763 に答える