Search in sources :

Example 21 with StringRef

use of com.sun.msv.util.StringRef in project OpenAM by OpenRock.

the class MSVValidator method childAsElementBody.

private void childAsElementBody(Object o, ValidatableObject vo) throws SAXException {
    String intfName = vo.getPrimaryInterface().getName();
    intfName = intfName.replace('$', '.');
    // if the object implements the RIElement interface,
    // add a marker attribute to the dummy element.
    //
    // For example, if the object is org.acme.impl.FooImpl,
    // the dummy element will look like
    // <{DUMMY_ELEMENT_NS}org.acme.Foo
    //          {<URI of this element>}:<local name of this element>="" />
    // 
    // This extra attribute is used to validate wildcards.
    //        AttributesImpl atts;
    //        if(o instanceof RIElement) {
    //            RIElement rie = (RIElement)o;
    //            atts = new AttributesImpl();
    //            atts.addAttribute(
    //                rie.____jaxb_ri____getNamespaceURI(),
    //                rie.____jaxb_ri____getLocalName(),
    //                rie.____jaxb_ri____getLocalName(),  // use local name as qname
    //                "CDATA",
    //                "");    // we don't care about the attribute value
    //        } else
    //            atts = emptyAttributes;
    // feed a dummy element to the acceptor.
    StartTagInfo sti = new StartTagInfo(DUMMY_ELEMENT_NS, intfName, intfName, /*just pass the local name as QName.*/
    emptyAttributes, this);
    Acceptor child = acceptor.createChildAcceptor(sti, null);
    if (child == null) {
        // some required elements were missing. report errors
        StringRef ref = new StringRef();
        child = acceptor.createChildAcceptor(sti, ref);
        context.reportEvent(target, ref.str);
    }
    if (o instanceof RIElement) {
        RIElement rie = (RIElement) o;
        if (!child.onAttribute2(rie.____jaxb_ri____getNamespaceURI(), rie.____jaxb_ri____getLocalName(), rie.____jaxb_ri____getLocalName(), "", null, null, null))
            // this object is not a valid member of the wildcard
            context.reportEvent(target, Messages.format(Messages.INCORRECT_CHILD_FOR_WILDCARD, rie.____jaxb_ri____getNamespaceURI(), rie.____jaxb_ri____getLocalName()));
    }
    child.onEndAttributes(sti, null);
    if (!acceptor.stepForward(child, null)) {
        // generated by XJC.
        throw new JAXBAssertionError();
    }
    // we need a separate validator instance to validate a child object
    context.validate(vo);
}
Also used : Acceptor(com.sun.msv.verifier.Acceptor) JAXBAssertionError(com.sun.xml.bind.JAXBAssertionError) RIElement(com.sun.xml.bind.RIElement) StartTagInfo(com.sun.msv.util.StartTagInfo) StringRef(com.sun.msv.util.StringRef)

Example 22 with StringRef

use of com.sun.msv.util.StringRef in project OpenAM by OpenRock.

the class MSVValidator method childAsElementBody.

private void childAsElementBody(Object o, ValidatableObject vo) throws SAXException {
    String intfName = vo.getPrimaryInterface().getName();
    intfName = intfName.replace('$', '.');
    // if the object implements the RIElement interface,
    // add a marker attribute to the dummy element.
    //
    // For example, if the object is org.acme.impl.FooImpl,
    // the dummy element will look like
    // <{DUMMY_ELEMENT_NS}org.acme.Foo
    //          {<URI of this element>}:<local name of this element>="" />
    // 
    // This extra attribute is used to validate wildcards.
    //        AttributesImpl atts;
    //        if(o instanceof RIElement) {
    //            RIElement rie = (RIElement)o;
    //            atts = new AttributesImpl();
    //            atts.addAttribute(
    //                rie.____jaxb_ri____getNamespaceURI(),
    //                rie.____jaxb_ri____getLocalName(),
    //                rie.____jaxb_ri____getLocalName(),  // use local name as qname
    //                "CDATA",
    //                "");    // we don't care about the attribute value
    //        } else
    //            atts = emptyAttributes;
    // feed a dummy element to the acceptor.
    StartTagInfo sti = new StartTagInfo(DUMMY_ELEMENT_NS, intfName, intfName, /*just pass the local name as QName.*/
    emptyAttributes, this);
    Acceptor child = acceptor.createChildAcceptor(sti, null);
    if (child == null) {
        // some required elements were missing. report errors
        StringRef ref = new StringRef();
        child = acceptor.createChildAcceptor(sti, ref);
        context.reportEvent(target, ref.str);
    }
    if (o instanceof RIElement) {
        RIElement rie = (RIElement) o;
        if (!child.onAttribute2(rie.____jaxb_ri____getNamespaceURI(), rie.____jaxb_ri____getLocalName(), rie.____jaxb_ri____getLocalName(), "", null, null, null))
            // this object is not a valid member of the wildcard
            context.reportEvent(target, Messages.format(Messages.INCORRECT_CHILD_FOR_WILDCARD, rie.____jaxb_ri____getNamespaceURI(), rie.____jaxb_ri____getLocalName()));
    }
    child.onEndAttributes(sti, null);
    if (!acceptor.stepForward(child, null)) {
        // generated by XJC.
        throw new JAXBAssertionError();
    }
    // we need a separate validator instance to validate a child object
    context.validate(vo);
}
Also used : Acceptor(com.sun.msv.verifier.Acceptor) JAXBAssertionError(com.sun.xml.bind.JAXBAssertionError) RIElement(com.sun.xml.bind.RIElement) StartTagInfo(com.sun.msv.util.StartTagInfo) StringRef(com.sun.msv.util.StringRef)

Example 23 with StringRef

use of com.sun.msv.util.StringRef in project OpenAM by OpenRock.

the class MSVValidator method endAttribute.

public void endAttribute() throws SAXException {
    insideAttribute = false;
    if (!acceptor.onAttribute2(attNamespaceUri, attLocalName, attLocalName, /* we don't have QName, so just use the local name */
    buf.toString(), this, null, null)) {
        // either the name was incorrect (which is quite unlikely),
        // or the value was wrong.
        // report an error
        StringRef ref = new StringRef();
        acceptor.onAttribute2(attNamespaceUri, attLocalName, attLocalName, buf.toString(), this, ref, null);
        context.reportEvent(target, ref.str);
    }
    buf = new StringBuffer();
}
Also used : StringRef(com.sun.msv.util.StringRef)

Example 24 with StringRef

use of com.sun.msv.util.StringRef in project OpenAM by OpenRock.

the class MSVValidator method endAttributes.

public void endAttributes() throws SAXException {
    if (!acceptor.onEndAttributes(null, null)) {
        // some required attributes are missing.
        // report a validation error
        // Note that we don't know which property of this object
        // causes this error.
        StringRef ref = new StringRef();
        StartTagInfo sti = new StartTagInfo(currentElementUri, currentElementLocalName, currentElementLocalName, emptyAttributes, this);
        acceptor.onEndAttributes(sti, ref);
        context.reportEvent(target, ref.str);
    }
}
Also used : StartTagInfo(com.sun.msv.util.StartTagInfo) StringRef(com.sun.msv.util.StringRef)

Example 25 with StringRef

use of com.sun.msv.util.StringRef in project OpenAM by OpenRock.

the class MSVValidator method _validate.

/** performs the validation to the object specified in the constructor. */
private void _validate() throws SAXException {
    context.getNamespaceContext().startElement();
    // validate attributes
    target.serializeURIs(this);
    endNamespaceDecls();
    target.serializeAttributes(this);
    endAttributes();
    // validate content model
    target.serializeBody(this);
    writePendingText();
    context.getNamespaceContext().endElement();
    if (!acceptor.isAcceptState(null)) {
        // some elements are missing
        // report error
        StringRef ref = new StringRef();
        acceptor.isAcceptState(ref);
        context.reportEvent(target, ref.str);
    }
}
Also used : StringRef(com.sun.msv.util.StringRef)

Aggregations

StringRef (com.sun.msv.util.StringRef)35 StartTagInfo (com.sun.msv.util.StartTagInfo)15 Acceptor (com.sun.msv.verifier.Acceptor)15 JAXBAssertionError (com.sun.xml.bind.JAXBAssertionError)5 RIElement (com.sun.xml.bind.RIElement)5