当前位置: 首页 > 知识库问答 >
问题:

使用xml请求在Spring 3.1 Restful服务中UnmarshalException

毕宇
2023-03-14

我使用spring web 3.1.1和spring oxm 3.1.1。

当jaxb2marshaller试图将xml源解压缩到对象时,发生了blow,异常。

2012-12-03 13:38:41,152[k.c.s.s.c.r.AuthenticationController:154][ERROR] JAXB unmarshalling exception; nested exception is javax.xml.bind.UnmarshalException: Namespace URIs and local names to the unmarshaller needs to be interned
org.springframework.oxm.UnmarshallingFailureException: JAXB unmarshalling exception; nested exception is javax.xml.bind.UnmarshalException: Namespace URIs and local names to the unmarshaller needs to be interned
at org.springframework.oxm.jaxb.Jaxb2Marshaller.convertJaxbException(Jaxb2Marshaller.java:761) ~[org.springframework.oxm-3.1.1.RELEASE.jar:3.1.1.RELEASE]
at org.springframework.oxm.jaxb.Jaxb2Marshaller.unmarshal(Jaxb2Marshaller.java:682) ~[org.springframework.oxm-3.1.1.RELEASE.jar:3.1.1.RELEASE]
at org.springframework.oxm.jaxb.Jaxb2Marshaller.unmarshal(Jaxb2Marshaller.java:665) ~[org.springframework.oxm-3.1.1.RELEASE.jar:3.1.1.RELEASE]

我在sevlet设置中配置了jaxb2 marshall。

<oxm:jaxb2-marshaller id="marshaller">
    <oxm:class-to-be-bound name="kr.co.skcomms.simon.bean.rest.Authentication" />
</oxm:jaxb2-marshaller>
@Autowired
public Jaxb2Marshaller marshaller;
....
Source source = new StreamSource(new StringReader(body));
Authentication authentication = (Authentication) marshaller.unmarshal(source);
@XmlRootElement
public class Authentication {
private String simon_auth;

private String client_ip;

private String request_url;

public Authentication(){
}

@XmlElement
public String getSimon_auth() {
    return simon_auth;
}

public void setSimon_auth(String simon_auth) {
    this.simon_auth = simon_auth;
}

@XmlElement
public String getClient_ip() {
    return client_ip;
}

public void setClient_ip(String client_ip) {
    this.client_ip = client_ip;
}

@XmlElement
public String getRequest_url() {
    return request_url;
}

public void setRequest_url(String request_url) {
    this.request_url = request_url;
}

但效果不好。

我很感激你的帮助。

共有1个答案

闻修筠
2023-03-14

我自己解决了问题。(哈哈)

下载SpringFramework-oxm-3.1.1.并记录org.springframework.oxm.jaxb.jaxb2Marshaller类的orign异常堆栈跟踪。

2012-12-03 21:28:14,864[o.s.o.j.Jaxb2Marshaller:698][DEBUG] [JAXBException] : javax.xml.bind.UnmarshalException: Namespace URIs and local names to the unmarshaller needs to be interned.
javax.xml.bind.UnmarshalException: Namespace URIs and local names to the unmarshaller needs to be interned.
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:631) ~[na:1.6.0_16]
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:236) ~[na:1.6.0_16]
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:231) ~[na:1.6.0_16]
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(Loader.java:103) ~[na:1.6.0_16]
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext$DefaultRootLoader.childElement(UnmarshallingContext.java:1038) ~[na:1.6.0_16]
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:467) ~[na:1.6.0_16]
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:448) ~[na:1.6.0_16]
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.SAXConnector.startElement(SAXConnector.java:137) ~[na:1.6.0_16]
    at com.caucho.xml.XmlParser.addElement(XmlParser.java:2615) ~[resin.jar:3.1.0]
    at com.caucho.xml.XmlParser.parseElement(XmlParser.java:663) ~[resin.jar:3.1.0]
    at com.caucho.xml.XmlParser.parseNode(XmlParser.java:381) ~[resin.jar:3.1.0]
    at com.caucho.xml.XmlParser.parseInt(XmlParser.java:256) ~[resin.jar:3.1.0]
    at com.caucho.xml.AbstractParser.parse(AbstractParser.java:644) ~[resin.jar:3.1.0]
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:200) ~[na:1.6.0_16]
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:173) ~[na:1.6.0_16]
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:137) ~[na:1.6.0_16]
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:105) ~[na:1.6.0_16]
    at org.springframework.oxm.jaxb.Jaxb2Marshaller.unmarshal(Jaxb2Marshaller.java:694) [classes:na]
    at org.springframework.oxm.jaxb.Jaxb2Marshaller.unmarshal(Jaxb2Marshaller.java:672) [classes:na]

如你所见。java UnmarshallerImpl对象选择树脂的XMLPaser...这就是问题所在…树脂设置对xml处理很重要的系统属性

javax.xml.parsers.DocumentBuilderFactory
javax.xml.parsers.SAXParserFactory
<!-- Uncomment to use Resin's XML implementations
 -
 - <system-property javax.xml.parsers.DocumentBuilderFactory
 -                 ="com.caucho.xml.parsers.XmlDocumentBuilderFactory"/>
 - <system-property javax.xml.parsers.SAXParserFactory
 -                 ="com.caucho.xml.parsers.XmlSAXParserFactory"/>
-->
 类似资料:
  • 我正在尝试使用Jmeter测试一个soap服务。当使用SOAP/XML-RPC请求元素时,服务给出正确的结果。当使用Fiddler执行时,它给出正确的响应(响应代码200)。 但是当我使用Http Request在Jeter上运行相同的服务时。它返回响应代码为500并给出 “请求格式无效:文本/xml。 这在响应数据中。我试着把它改成许多格式,像“应用程序/xml”等等,但是没有用。 [HTTP_

  • Python 的标准库 urllib 提供了大部分 HTTP 功能,但使用起来较繁琐。通常,我们会使用另外一个优秀的第三方库:Requests,它的标语是:Requests: HTTP for Humans。 Requests 提供了很多功能特性,几乎涵盖了当今 Web 服务的需求,比如: 浏览器式的 SSL 验证 身份认证 Keep-Alive & 连接池 带持久 Cookie 的会话 流下载

  • 我被夹在中间。我想实现一个POST方法,使用HttpUrlConnection向服务器发送注册用户的电子邮件、名称和密码。以下是我的代码: 我不知道我在哪里犯了错误。我收到以下回复 空格后的“0”是超文本传输协议响应代码返回的响应代码。当我在浏览器中尝试时,我的网址是正确的。我不知道我在哪里犯了错误;是我的服务器故障还是我的代码有错误,因为我不认为我的代码有任何交互处理。 我是Android开发的

  • 我是web服务新手,正在阅读Martin Kalin的《Java Webservices》一书。我已经了解了它最初的基本概念,有一个问题: 假设将HTTP请求(包含SOAP消息信封)发送到JavaWeb服务()。该请求是否由Servlet内部处理,Servlet提取SOAP消息并将其转换为相应Java域对象,然后调用服务实现bean? 无论Metro和Axis等现成框架如何,这个问题都是通用的。只

  • 本文向大家介绍在 Angular6 中使用 HTTP 请求服务端数据的步骤详解,包括了在 Angular6 中使用 HTTP 请求服务端数据的步骤详解的使用技巧和注意事项,需要的朋友参考一下 第一步 准备好api接口地址, 例如 https://api.example.com/api/ 第二步 在根组件 app.components.ts 中引入 HttpClientModule 模块。 第三步

  • 我需要使用https协议向我的web服务发送请求。使用SOAP UI,它工作得很好,也为https请求提供响应,但是,如果我发送https请求,它提供以下异常javax.xml.ws.WebServiceException:未能访问WSDL:https://abc:8443/xyz/FileTransferService?WSDL。它失败的原因是: