EclipseLink Moxy unmarshall and getValueByXPath gives null



我使用下面的代码来获取解组,并通过Xpath查询解组后的对象。我可以在解组后获得对象,但在使用XPath进行查询时,值为null。

我需要指定任何NameSpaceResolver吗?

如果你想了解更多信息,请告诉我。

我的代码:

         JAXBContext jaxbContext = (JAXBContext) JAXBContextFactory.createContext(new Class[] {Transaction.class}, null);
         Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
         StreamSource streamSource= new StreamSource(new StringReader(transactionXML));
         transaction = unmarshaller.unmarshal(streamSource, Transaction.class).getValue();
         String displayValue = jaxbContext.getValueByXPath(transaction, xPath, null, String.class);

我的XML:

         <Transaction xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"                          xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
         <SendingCustomer firstName="test">
         </SendingCustomer>
         </Transaction>

由于您的示例中没有名称空间,因此不需要担心利用NamespaceResolver。您没有提供遇到问题的XPath,所以我只是在下面的示例中选择了一个。

JAVA模型

交易

import javax.xml.bind.annotation.*;
@XmlRootElement(name="Transaction")
public class Transaction {
    @XmlElement(name="SendingCustomer")
    private Customer sendingCustomer;
}

客户

import javax.xml.bind.annotation.XmlAttribute;
public class Customer {
    @XmlAttribute
    private String firstName;
    @XmlAttribute
    private String lastNameDecrypted;
    @XmlAttribute(name="OnWUTrustList")
    private boolean onWUTrustList;
    @XmlAttribute(name="WUTrustListType")
    private String wuTrustListType;
}

演示代码

input.xml

<Transaction xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <SendingCustomer firstName="test" lastNameDecrypted="SMITH"
        OnWUTrustList="false" WUTrustListType="NONE">
    </SendingCustomer>
</Transaction>

演示

import javax.xml.bind.Unmarshaller;
import javax.xml.transform.stream.StreamSource;
import org.eclipse.persistence.jaxb.JAXBContext;
import org.eclipse.persistence.jaxb.JAXBContextFactory;
public class Demo {
    public static void main(String[] args) throws Exception {
        JAXBContext jaxbContext = (JAXBContext) JAXBContextFactory.createContext(new Class[] {Transaction.class}, null);
        Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
        StreamSource streamSource= new StreamSource("src/forum17687460/input.xml");
        Transaction transaction = unmarshaller.unmarshal(streamSource, Transaction.class).getValue();
        String displayValue = jaxbContext.getValueByXPath(transaction, "SendingCustomer/@firstName", null, String.class);
        System.out.println(displayValue);
    }
}

输出

test

最新更新