java-8でxmlの非整列化エラー「secure-processing org.xml.sax.SAXNotRecognizedExceptionがjava.lang.IllegalStateExceptionを引き起こしています」

mmx73:

次のコードは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に含まれている)

ヒントは大歓迎です。

mmx73:

依存関係の問題でした。

これが私が問題を解決した方法です:

  1. 新しいmavenプロジェクトを作成します。以下の簡単なコードを使用して、プログラムがエラーで通常クラッシュし、構造を解析できませんでした。
  2. 依存関係をプロジェクトpom.xmlにコピーすると、プログラムがクラッシュします(上記のとおり)。

  3. 「悪い」依存関係を見つけるために、優先する方法(適切な推測、二分法、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>

お役に立てば幸いです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ