Java – use JAXB to create reference objects based on attributes

Consider the following XML:

<Config>
    <Paths>
        <Path reference="WS_License"/>
    </Paths>

    <Steps>
        <Step id="WS_License" title="License Agreement" />
    </Steps>
</Config>

The following JAXB classes:

public class Path {

    private String _reference;

    public String getReference() {
        return _reference;
    }

    @XmlAttribute
    public void setReference( String reference ) {
        _reference = reference;
    }

}

and

public class Step {

    private String _id;
    private String _title;

    public String getId() {
        return _id;
    }

    @XmlAttribute
    public void setId( String id ) {
        _id = id;
    }

    public String getTitle() {
        return _title;
    }

    @XmlAttribute
    public void setTitle( String title ) {
        _title = title;
    }

}

Instead of storing the reference as a string in the path object, I save it as a step object The links between these objects are the reference and ID attributes@ Is the xmljavatypeadapter property feasible? Can anyone be so kind as to provide examples of correct usage?

thank you!

Edit:

I also want to use elements to do the same technology

Consider the following XML:

<Config>
    <Step id="WS_License" title="License Agreement">
        <DetailPanelReference reference="DP_License" />
    </Step>

    <DetailPanels>
        <DetalPanel id="DP_License" title="License Agreement" />
    </DetailPanels>
</Config>

The following JAXB classes:

@XmlAccessorType(XmlAccessType.FIELD)
public class Step {

    @XmlID
    @XmlAttribute(name="id")
    private String _id;

    @XmlAttribute(name="title")
    private String _title;

    @XmlIDREF
    @XmlElement(name="DetailPanelReference",type=DetailPanel.class)
    private DetailPanel[] _detailPanels; //Doesn't seem to work

}

@XmlAccessorType(XmlAccessType.FIELD)
public class DetailPanel {

    @XmlID
    @XmlAttribute(name="id")
    private String _id;

    @XmlAttribute(name="title")
    private String _title;

}

Properties in step object_ Detailpanels is empty, links do not seem to work Is there any option to create a link without creating a new JAXB object that contains only a reference to the detailpanel?

Thanks again:)!

Solution

You can use @ xmlid to map attributes to keys and @ xmlidref to map references to keys for this use case

step

@XmlAccessorType(XmlAccessType.FIELD)
public class Step {

    @XmlID
    @XmlAttribute
    private String _id;

}

route

@XmlAccessorType(XmlAccessType.FIELD)
public class Path {

    @XmlIDREF
    @XmlAttribute
    private Step _reference;

}

For more information

> http://blog.bdoughan.com/2010/10/jaxb-and-shared-references-xmlid-and.html

UPDATE

Note: I am the leader of eclipse link JAXB (Moxy) and a member of JAXB (jsr-222) expert group

If you use Moxy as a JAXB (jsr-222) provider, you can use the @ xmlpath annotation for your use case

import javax.xml.bind.annotation.*;
import org.eclipse.persistence.oxm.annotations.XmlPath;

@XmlAccessorType(XmlAccessType.FIELD)
public class Step {

    @XmlID
    @XmlAttribute
    private String id;

    @XmlPath("DetailPanelReference/@reference")
    @XmlIDREF
    // private List<DetailPanel> _detailPanels; // WORKS
    private DetailPanel[] _detailPanels; // See bug:  http://bugs.eclipse.org/399293

}

For more information

> http://bugs.eclipse.org/399293 > http://blog.bdoughan.com/2011/05/specifying-eclipselink-moxy-as-your.html > http://blog.bdoughan.com/2010/07/xpath-based-mapping.html

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>