Hi,


I’m facing a strange behavior using xPath to query boolean values.

Every time I tried to query boolean values with xPath, I get an exception
saying that no value was found.


The exception is:

org.apache.commons.jxpath.JXPathNotFoundException: No value for xpath:
<myXpath>


Let me present the complete example that I'm using:


This is my schema:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"; xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"; xmlns="http://mySchema";
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"; xmlns:xjc="
http://java.sun.com/xml/ns/jaxb/xjc"; targetNamespace="http://mySchema";
elementFormDefault="qualified" jaxb:extensionBindingPrefixes="xjc"
jaxb:version="2.0">
    <xs:annotation>
        <xs:appinfo>
            <jaxb:globalBindings>
                <xjc:serializable/>
            </jaxb:globalBindings>
        </xs:appinfo>
    </xs:annotation>
    <!--         Base type definitions    -->
    <xs:complexType name="MyEntity">
        <xs:sequence>
            <xs:element name="Id" type="xs:string" minOccurs="0"
maxOccurs="1"/>
            <xs:element name="Name" type="xs:string" minOccurs="0"
maxOccurs="1"/>
            <xs:element name="IsUsaResident" type="xs:boolean"
minOccurs="0" maxOccurs="1"/>
            <xs:element name="AnotherBooleanValue" type="xs:boolean"
minOccurs="0" maxOccurs="1"/>
        </xs:sequence>
    </xs:complexType>
    <!--        Root Element    -->
    <xs:element name="MyEntity" type="MyEntity"/>
</xs:schema>


In order to generate my java classes based on the schema, I'm using the xjc
ant tag.

My generated class looks like this:


package myschema;
import java.io.Serializable;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "MyEntity", propOrder = {
    "id",
    "name",
    "isUsaResident",
    "anotherBooleanValue"
})
public class MyEntity implements Serializable{
    @XmlElement(name = "Id")
    protected String id;
    @XmlElement(name = "Name")
    protected String name;
    @XmlElement(name = "IsUsaResident")
    protected Boolean isUsaResident;
    @XmlElement(name = "AnotherBooleanValue")
    protected Boolean anotherBooleanValue;
    public String getId() { return id; }
    public void setId(String value) { this.id = value; }
    public String getName() { return name; }
    public void setName(String value) { this.name = value; }
    public Boolean isIsUsaResident() { return isUsaResident; }
    public void setIsUsaResident(Boolean value) { this.isUsaResident =
value; }
    public Boolean isAnotherBooleanValue() { return anotherBooleanValue; }
    public void setAnotherBooleanValue(Boolean value) {
this.anotherBooleanValue = value; }
}


And I'm using the following code to query boolean values:
 MyEntity myEntity = new MyEntity();
myEntity.setId("1");
myEntity.setName("MyName");
myEntity.setIsUsaResident(true);
myEntity.setAnotherBooleanValue(false);
Object result = "";
JXPathContext context = JXPathContext.newContext(myEntity);
try {
result = context.getValue("/IsUsaResident");
if (result == null) {
result = "";
}
} catch (JXPathException exc) {
exc.printStackTrace();
}
System.out.println(result.toString());

Can someone help me with this?

Thanks,
-Lucas Reginato

Reply via email to