【问题标题】:JAXB unmarshalling Unknown issueJAXB 解组未知问题
【发布时间】:2012-03-09 10:11:30
【问题描述】:

我正在使用 JAXB 解组 xml,但它突然返回错误的值,它返回了错误的值。前一天它工作正常。

节点: <ListID>166</ListID>

解组码是:

public class ResponseParser {
static Object obj;

public static Object parseResponse(String response, Class<?> ctxClass) {
    try {
        ByteArrayInputStream input = new ByteArrayInputStream(response.getBytes());
        JAXBContext jc = JAXBContext.newInstance (ctxClass);
        Unmarshaller  unmarshaller = jc.createUnmarshaller();
        obj =   unmarshaller.unmarshal(input);
    }
    catch (JAXBException e) {

    }
    return obj;
}
}

它正在返回:-90。但它像之前一样按顺序返回-90它是-91

请帮忙!

【问题讨论】:

  • 您是否通过调试器运行了您的代码,并确定了传递给解组器的确切内容?
  • 所以response 是“166”,当您使用 JAXB 解组时,您会得到 -90(或任何其他序列号)? obj 是什么类型?也许您可以尝试使用具体类而不是通用通配符?
  • 是的,响应是 "166" 。 obj 是对象类型。它是工作文件,应用程序已准备就绪,但我不知道突然发生了什么。
  • @TusharAgarwal - 我很困惑输入值 166 与输出有什么关系。你为什么期待-90
  • @BlaiseDoughan 我不喜欢-90 我需要节点&lt;ListId&gt; 中的值116,但它正在返回-90

标签: java xml-serialization jaxb


【解决方案1】:

输入166 超出了byte 的范围,在Java 中它是127 的最大值。

package forum9632269;

public class Demo {

    public static void main(String[] args) throws Exception {
        System.out.println(Byte.MAX_VALUE);
    }

}

输出

127

【讨论】:

  • @TusharAgarwal - 我已根据您添加到问题中的 cmets 更新了我的答案。问题是166 的值超出了byte 数据类型的范围。
【解决方案2】:

您所面临的情况很奇怪,但可能它与 xml 文件编码有关。换个电话试试

ByteArrayInputStream input = new ByteArrayInputStream(response.getBytes());

ByteArrayInputStream input = new ByteArrayInputStream(response.getBytes("UTF8"));

让我们知道这是否是您问题的真正原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    • 1970-01-01
    • 2013-05-23
    • 2014-09-18
    • 2023-04-09
    相关资源
    最近更新 更多