簡體   English   中英

具有/ in屬性值的JAXB XML解組

[英]JAXB XML unmarshal with / in attribute value

當像這樣的一個屬性值中包含一些特殊字符“ /”時,我在解組XML文件時遇到問題:

<field name = "test" value = "test&/"/>

我正在使用庫woodstox-core(v5.0.3)和stax2-api(3.1.4)

該屬性值在XSD中定義為規范化的String,我認為允許使用字符“ /”:

<xs:element name="field" maxOccurs="unbounded">
    <xs:complexType>
        <xs:attribute name="name" type="xs:token" use="required" />
        <xs:attribute name="value" type="xs:normalizedString" use="required" />
    </xs:complexType>
</xs:element>

但是,在進行unmarshal調用時,會引發異常:

XMLStreamReader xsr = null;
try {
    // Create the XML stream reader
    XMLInputFactory xif = XMLInputFactory.newFactory();
    xsr = xif.createXMLStreamReader(inputStream, "UTF-8");

    // Unmarshall the XML with JAXB, with XML schema validation enabled
    JAXBContext jc = JAXBContext.newInstance(Root.class);
    Unmarshaller unmarshaller = jc.createUnmarshaller();
    unmarshaller.setSchema(this.xmlSchema);
    Root rootIndex = (Root) unmarshaller.unmarshal(xsr);
    [...]
}

這里是例外:

Caused by: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character '/' (code 47) (expected a name start character)
 at [row,col {unknown-source}]: [17,74]
    at com.ctc.wstx.sr.StreamScanner.throwUnexpectedChar(StreamScanner.java:653) [woodstox-core-5.0.3.jar:5.0.3]
    at com.ctc.wstx.sr.StreamScanner.parseFullName(StreamScanner.java:1933) [woodstox-core-5.0.3.jar:5.0.3]
    at com.ctc.wstx.sr.StreamScanner.parseEntityName(StreamScanner.java:2058) [woodstox-core-5.0.3.jar:5.0.3]
    at com.ctc.wstx.sr.StreamScanner.fullyResolveEntity(StreamScanner.java:1525) [woodstox-core-5.0.3.jar:5.0.3]
    at com.ctc.wstx.sr.BasicStreamReader.parseAttrValue(BasicStreamReader.java:2017) [woodstox-core-5.0.3.jar:5.0.3]
    at com.ctc.wstx.sr.BasicStreamReader.handleNsAttrs(BasicStreamReader.java:3145) [woodstox-core-5.0.3.jar:5.0.3]
    at com.ctc.wstx.sr.BasicStreamReader.handleStartElem(BasicStreamReader.java:3043) [woodstox-core-5.0.3.jar:5.0.3]
    at com.ctc.wstx.sr.BasicStreamReader.nextFromTree(BasicStreamReader.java:2919) [woodstox-core-5.0.3.jar:5.0.3]
    at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1123) [woodstox-core-5.0.3.jar:5.0.3]
    at com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.bridge(StAXStreamConnector.java:197) [jaxb-impl-2.2.3-1.jar:2.2.3]
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:366) [jaxb-impl-2.2.3-1.jar:2.2.3]
    ... 16 more

我還需要定義其他任何內容來接受那些字符(屬於UTF-8)還是完全不允許使用?

提前謝謝了!

這里的問題實際上不是/字符,而是前面的&。 /本身可以,但是&需要轉義。 由於出現錯誤消息,我太關注/了。

轉義&可以解決此問題:

<field name = "test" value = "test&amp;/"/>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM