MarshalValidation.java Source code

Java tutorial

Introduction

Here is the source code for MarshalValidation.java

Source

import java.io.File;

import javax.xml.XMLConstants;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.ValidationEvent;
import javax.xml.bind.ValidationEventHandler;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.XmlValue;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;

public class MarshalValidation {

    public static void main(String[] args) throws Exception {
        Person p = new Person();
        p.setFirstName("B");
        p.setLastName("H");

        JAXBContext context = JAXBContext.newInstance(Person.class);
        Marshaller marshaller = context.createMarshaller();

        SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
        Schema schema = sf.newSchema(new File("person.xsd"));

        marshaller.setSchema(schema);
        marshaller.setEventHandler(new ValidationEventHandler() {
            public boolean handleEvent(ValidationEvent event) {
                System.out.println(event);
                return false;
            }
        });

        marshaller.marshal(p, System.out);
    }
}

@XmlRootElement()
@XmlType(name = "")
// @XmlAccessorType(XmlAccessType.FIELD)
class Person {

    // @XmlAttribute()
    private String firstName;

    private PersonName friend;

    private String lastName;

    public String getFirstName() {
        return firstName;
    }

    @XmlElement(nillable = true)
    // @XmlElement(required=true)
    public PersonName getFriend() {
        return friend;
    }

    // @XmlValue()
    // @XmlTransient
    public String getLastName() {
        return lastName;
    }

    public void setFirstName(String s) {
        firstName = s;
    }

    public void setFriend(PersonName friend) {
        this.friend = friend;
    }

    // r @XmlTransient
    public void setLastName(String s) {
        lastName = s;
    }
}

@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
class PersonName {

    @XmlValue
    private String value;

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public static void main(String[] args) throws JAXBException {
        PersonName pn = new PersonName();
        pn.value = "foo";
        JAXBContext context = JAXBContext.newInstance(PersonName.class);
        context.createMarshaller().marshal(pn, System.out);
    }
}