1

我正在使用 org.springframework.oxm.jaxb.Jaxb2Marshaller 来解组我的请求 xml。即使编码在序言中设置为,由于请求中存在“&”(与号),解组失败

请求XML -

<?xml version="1.0" encoding="utf-8"?><createaccountrequest><username>Test&jsongg</username><userpassword>12345</userpassword></createaccountrequest>

我得到的例外如下

    500内部服务器错误

    org.springframework.http.converter.HttpMessageNotReadableException:无法解组到 [class com.marketplace.system.customer.service.component.request.vo.AccountRequestVO]:null;嵌套异常是 javax.xml.bind.UnmarshalException
     - 有关联的例外:
    [org.xml.sax.SAXParseException:对实体“jsongg1h61”的引用必须以';'结尾 分隔符。]
        在 org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter.readFromSource(Jaxb2RootElementHttpMessageConverter.java:82) ~[spring-web-3.1.0.RELEASE.jar:3.1.0.RELEASE]
        在 org.springframework.http.converter.xml.AbstractXmlHttpMessageConverter.readInternal(AbstractXmlHttpMessageConverter.java:61) ~[spring-web-3.1.0.RELEASE.jar:3.1.0.RELEASE]
        在 org.springframework.http.converter.AbstractHttpMessageConverter.read(AbstractHttpMessageConverter.java:153) ~[spring-web-3.1.0.RELEASE.jar:3.1.0.RELEASE]
        在 org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:120) ~[spring-webmvc-3.1.0.RELEASE.jar:3.1.0.RELEASE]

任何指针都会有很大帮助。

提前致谢

4

1 回答 1

2

解析器错误是正确的

<username>Test&jsongg</username>

不是格式良好的 XML。如果您想在 XML 中元素的内容中使用与号,则需要将其转义为&amp;.

围绕 XML 字符数据的规则——哪些字符可以按原样使用,哪些需要转义(以及如何转义),以及即使以转义形式也完全禁止使用——很复杂,如果你想生成 XML,你应该使用XML 库这样做而不是尝试手动完成。也就是说,您可以使用 CDATA 实现您想要的。以下格式良好的:

<username><![CDATA[Test&jsongg]]></username>

以开头<![CDATA[和结尾的文本块]]>被解析器视为纯文本,与号、小于号等失去了它们的特殊含义。这里要注意的是 CDATA 部分不嵌套,因此如果您在 CDATA 中包装的值包含三个字符的子字符串]]>,那么需要通过将其替换为类似]]]]><![CDATA[>(the ]], then CDATA 部分的结尾并立即开始另一个,继续>)。

于 2013-01-24T10:15:29.387 回答