gpt4 book ai didi

java - JAXB 返回 JAXBElement 而不是根元素

转载 作者:行者123 更新时间:2023-11-29 06:01:57 25 4
gpt4 key购买 nike

通常 JAXB 可以工作,但它没有正确解析我的模式,或者它应该将 XMLRootElement 放在我的对象上的东西,但没有。我使用这段代码来解码​​失败,我不得不求助于将包用作字符串..

ProductsDomainResponseType resp = unmarshaller.unmarshall(ProductsDomainResponseType.class, strXmlInput);

这是xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="http://www.cigna.com/acme/services/product/2012/03"
xmlns:prd="http://www.cigna.com/IFPRetail/Product/0.1" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:outc="http://www.cigna.com/acme/domains/utility/outcome/2010/03"
targetNamespace="http://www.cigna.com/acme/services/product/2012/03"
elementFormDefault="qualified" attributeFormDefault="unqualified">

<xs:import namespace="http://www.cigna.com/IFPRetail/Product/0.1" schemaLocation="product.xsd" />
<xs:import namespace="http://www.cigna.com/acme/domains/utility/outcome/2010/03" schemaLocation="InvocationOutcome_2010_03.xsd" />

<xs:element name="productsDomainResponse" type="ProductsDomainResponseType">
<xs:annotation>
<xs:documentation>in case of error use invocationOutcome element from
InvocationOutcome XSD in utility namespace</xs:documentation>
</xs:annotation>
</xs:element>

<xs:complexType name="ProductsDomainResponseType">
<xs:annotation>
<xs:documentation>Products Domain XML Response</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element ref="outc:invocationOutcome" />
<xs:element name="products" type="ProductType" minOccurs="0" />
</xs:sequence>
</xs:complexType>

<xs:complexType name="ProductType">
<xs:sequence>
<xs:element ref="prd:product" />

</xs:sequence>
</xs:complexType>

</xs:schema>

最后,我生成的对象缺少 XmlRootElement。知道发生了什么事吗?

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "ProductsDomainResponseType", propOrder = {
"invocationOutcome",
"products"
})
public class ProductsDomainResponseType {

最佳答案

我现在正在做的项目中遇到了这个问题。试试下面的方法。特别是最后几行应该会有帮助。

        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db = dbf.newDocumentBuilder();
InputStream is = post.getResponseBodyAsStream();
Document doc = db.parse(is);
DOMSource ds = new DOMSource(doc);
JAXBContext responseContext = JAXBContext.newInstance(SearchEnrolledFundingResponse.class);
Unmarshaller u = responseContext.createUnmarshaller();
JAXBElement<SearchEnrolledFundingResponse> jaxbResponse = (JAXBElement<SearchEnrolledFundingResponse>) u.unmarshal(ds, SearchEnrolledFundingResponse.class);
SearchEnrolledFundingResponse searchResponse = jaxbResponse.getValue();

关于java - JAXB 返回 JAXBElement 而不是根元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9791992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com