免責事項:私はこのすべてにおいて信じられないほど素人です
XMLに加えてJSONを出力するために取り組んでいるプロジェクトを取得しようとしています。元々、これを行うための以前の方法には、Element の引数を取り、net.sf JSONObject 型のオブジェクトに再帰的に挿入して JSON 出力を作成し、法線を使用して XML にマーシャリングする方法JAXBContext
が含まれていました。Marshaller
私が望んでいたのは、MOXy を JAXB プロバイダーとして使用し、バインディングから XML と JSON の両方をマーシャリングすることでした。
当初、XML がマーシャリングされたとき、私は次のことを行いました。
jc = JAXBContext.newInstance("packageA:packageB:packageC...etc.");
public static String marshal(JAXBContext context, JAXBElement<?> je) throws JAXBException {
StringWriter sout = new StringWriter();
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.FALSE);
m.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
m.marshal(je, sout);
return sout.toString();
}
その後
JAXBElement<myObject> jaxb =
new JAXBElement<myObject>(myObject_QNAME, myObject.class, null, value);
return XmlResponseMessage(marshal(jc, jaxb));
}
(これはおそらく重要なので、私が取り組んでいるアプリケーションは spring フレームワークを使用していることに言及する必要があります。)
また、私は EclipseLink に関する Blaise のブログ投稿をすべて読みました。何回か。私はそれについて非常に浅い理解しか持っていないので、彼のページの1つに私をリンクする代わりに、その解決策とそれが機能する理由を説明していただければ幸いです
そうは言っても、バインディングを取得jaxb.properties
するのではなく、MOXy を取得しようとするために、パッケージの 1 つにファイルを含めてみましJAXBElement
た。ただし、JAXBContext.newInstance("my list of : delimited packages")
プログラムがハングするだけです。エラーでもなく、ハングするだけです。ステップスルーすると、EclipseLinknewInstance
メソッドの呼び出しがハングしていることがわかります。オンラインで解決策を何時間も探しました。Class[] に含めるクラスが多すぎるため、クラスの配列を使用してプロパティを設定できません。これが、プロパティ ファイルを使用する代わりにネイティブの moxy API を使用できなかった理由でもあります。EclipseLink が正しくセットアップされていると思います。環境変数を設定し、eclipselink_home
eclipselink.jar をビルドパスに追加しました。