次のコードは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に含まれている)
ヒントは大歓迎です。
依存関係の問題でした。
これが私が問題を解決した方法です:
依存関係をプロジェクトpom.xmlにコピーすると、プログラムがクラッシュします(上記のとおり)。
「悪い」依存関係を見つけるために、優先する方法(適切な推測、二分法、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]
コメントを追加