当前位置: 首页 > 面试题库 >

在Java-8“安全处理org.xml.sax.SAXNotRecognizedException导致java.lang.IllegalStateException”中解组xml错误

农明辉
2023-03-14
问题内容

以下代码在Java 7中运行良好

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;

String xmlString = '<xml ..... ';

StringReader reader = new StringReader(xmlString);

JAXBContext jc = JAXBContext.newInstance(MyClass.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
MyClass myClass = (MyClass) unmarshaller.unmarshal(reader);
....

现在我们必须升级到Java 8,现在在执行代码时遇到此异常:

Sep 03, 2014 1:42:47 PM com.sun.xml.internal.bind.v2.util.XmlFactory createParserFactory
SCHWERWIEGEND: null
org.xml.sax.SAXNotRecognizedException: Feature: http://javax.xml.XMLConstants/feature/secure-processing
    at org.apache.xerces.jaxp.SAXParserFactoryImpl.setFeature(SAXParserFactoryImpl.java:100)
    at com.sun.xml.internal.bind.v2.util.XmlFactory.createParserFactory(XmlFactory.java:114)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.getXMLReader(UnmarshallerImpl.java:139)
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:157)
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:214)

我知道,有一个问题,针对类似的问题,但退一步Java
7的是不是一个解决方案给我。

我试图添加以下Maven依赖项

<dependency>
    <groupId>javax.xml</groupId>
    <artifactId>jaxp-api</artifactId>
    <version>1.4</version>
</dependency>

但这并没有改变结果,因此我将其删除(感谢@BlaiseDoughan提供的信息,该信息已包含在Java 6中)

欢迎任何提示,非常感谢。


问题答案:

这是一个依赖问题。

这是我解决问题的方式:

  1. 用下面的简单代码编写一个新的maven项目,该程序通常因错误而崩溃,无法解析该结构是可以的。
  2. 将依赖项复制到项目pom.xml中,现在程序应该崩溃(如上所述)

  3. 不,您可以在喜欢的方法(好的猜测,Bisection,1×1 ..)之后删除依赖项以找到“不良”依赖项。也许有人有更好(更专业)的方法,这个方法对我有用。

现在您可以决定要做什么,也许有新版本可用,在我们的情况下,这是我自己的大学包,其中包括我可以排除的大学包。

public class Test {
    public Test() {
    }
    public static void main(String[] args) {
        try {
            StringReader reader = new StringReader("<xml></xml>");
            JAXBContext jc = JAXBContext.newInstance(TestXML.class);
            Unmarshaller unmarshaller = jc.createUnmarshaller();
            TestXML testXMLs = (TestXML) unmarshaller.unmarshal(reader);
        } catch (JAXBException e) {
            e.printStackTrace();
        }
    }
}

和testXML类

@XmlRootElement(name="rss")
@XmlAccessorType(XmlAccessType.FIELD)
public class TestXML {   
    public TestXML() {
    }

    @XmlElementWrapper(name="channel")
    @XmlElement(name="item")
    private int i ;

    public int getI() {
        return i;
    }    
    public void setI(int i) {
        this.i = i;
    }
}

顺便说一句:就我而言,这是

<dependency>
    <groupId>jcs</groupId>
    <artifactId>jcs</artifactId>
    <version>1.3</version>
</dependency>

希望能有所帮助。



 类似资料:
  • 问题内容: 接收Xml并尝试解析它时,我遇到此异常。作为独立应用程序运行时,对此负责的代码已经过测试。但是我现在将其集成到Tomcat中。 堆栈跟踪为: 挖掘发现我发现了这一点,所以也许解决方案是更改Tomcat设置的选项。 所以问题是: 问题的根源是什么? 最好的解决方法? 更改Tomcat选项的好方法吗?这是怎么做的? 更新资料 当使用Java 8运行它时,会发生这种情况,还原到Java 7可

  • 问题内容: 在 Java 8 In Action 一书的第7.1.1节中,作者指出,通过添加功能,流可以从并行处理中受益。他们提供了一个简单的方法来说明这一点。我很好奇它的工作原理,所以我执行了以下代码: 令我惊讶的是,我收到此错误: 我在Windows 7 SP1上使用四核处理器运行Java 1.8.0_45。这是怎么回事? 问题答案: 在这里,您可以创建无限流并在之后对其进行限制。关于并行处理

  • 问题内容: 使用node / express-我想从请求标头中获取一些JSON,但我想安全地做到这一点。 如果由于某种原因它不是有效的JSON,那很好,它可以返回false或其他任何值,它将拒绝请求并继续执行。问题是,如果它不是有效的JSON,则会引发语法错误。通常,我希望语法错误能够爆发,但在这种情况下不希望。 我是否会刮取堆栈并检查来自该特定模块的错误解析调用,如果是这种情况,它将忽略它?这似

  • 问题内容: 每当我编写包含ArrayUtil的代码时,都会导致意外错误: 我使用Eclipse编写代码,“ ArrayUtil”下始终有一个红色下划线。我究竟做错了什么? 问题答案: 您的ArrayUtil属于哪个软件包?没有这些信息,没人能确定地回答。 你到这里了吗?如果是,则您的签名看起来正确。您可能尚未导入它,或者该类不在您的CLASSPATH中。Eclipse告诉您更正其中一项。

  • 问题内容: 我正在尝试使用以下命令将标准PKCS#12(.p12)密钥库转换为Java JKS密钥库: 它失败了: 您有解决该问题的想法吗? 问题答案: pkcs12密钥库确实已损坏。

  • 问题内容: 我正在使用ResponseEntityExceptionHandler全局处理错误,并且几乎可以正常工作,只是我想用spring处理错误的请求。通过任何逻辑,handleNoSuchRequestHandlingMethod都应处理此问题,但是总是要进行处理 HTTP Status 404 - type Status report message description The req