AXIS-JAXB Unmarshal不使用除jdk 1.8.077之外的任何JDK

时间:2017-01-12 08:49:56

标签: java xml eclipse jaxb wsdl

我遵循了以下程序:

  1. 使用WSDL(Apache Axis 1)在eclipse中生成客户端文件。
  2. 使用JAXB解组请求XML,然后调用Web服务。
  3. 如果我使用JDK 1.8.077,那么XML将被成功解析。如果我使用任何其他JDK,如版本1.8.102或1.8.112,JAXB无法正确解析并返回元素的null值。

    有人可以在这里向我推荐这个问题吗?

2 个答案:

答案 0 :(得分:0)

在降级到1.8.74 JAXB能够正确解析后,我可以用1.8.111确认同样的错误行为。

版本1.8.111:

JAXBContext.createUnmarshaller().unmarshal(new StreamSource(...), MyType.class).getValue()

返回null

答案 1 :(得分:0)

问题的一个可能原因是解析器期望代码为更高版本的JDK 1.8提供对XML命名空间的支持。

如果您使用基于SAX的解析器来解析XML文档,请确保将namespaceAware API设置为true

final SAXParserFactory sax = SAXParserFactory.newInstance(); sax.setNamespaceAware(真);

默认情况下,该值设置为 false

我使用JDK版本 1.8.121 &使用基于SAX的解析器 1.8.131 ,只需为SAXParserFactory实例的namespaceAware API设置值true即可解决问题。

注意:JAXB类是从eclipse生成的