3

JAXB2を使用して結果をマーシャリングするTomcat6でホストされる単純なSpring3、Hibernate3 /(JPA2)、RESTfulサービスを構築しました。(注釈付きのpojoを使用します。)特定の名前空間プレフィックスを使用する必要があったため、カスタムのcom.sun.xml.bind.marshaller.NamespacePrefixMapperを作成しました。アプリケーションにJAXB2RIjarを含めましたが、すべて正常に機能しました。

次に、誰かがそれは素晴らしいと言いました。WebLogic11g(10.3.3)でもホストする必要があります。問題ありません。アプリケーションjarを優先するように特別なweblogicデプロイメント記述子を作成し、persistence.xmlの名前を変更し、JPA2jarを使用してWARをEARにラップしました。それはほとんどうまくいきました。

残念ながら、WebLogicサーバーは、JAXBも使用するカスタムセキュリティレルムを実行し、アプリケーションとの競合を引き起こします。そこで、アプリからJAXB jarを削除すると、WebLogicで正常に実行されます。もちろん、JAXB jarをTomcatに追加しない限り、Tomcatでは実行されなくなります。それは避けたいです。

だから私の質問...私は、太陽の「内部」JAXB2実装の使用とアプリでのRIのパッケージ化に関する多くの意見/意見の相違を含むstackoverflowに関するかなりの数の投稿を読みました。この問題に対する明確な解決策はまだありませんか?スタックは、JAXB2 RIを含めずに名前空間プレフィックスをカスタムマップする別の方法をサポートしていますか?Java6の「内部」JAXBNamespacePrefixMapperを安全に使用できますか、それともさまざまなJavaリリースで使用できますか?Spring3は別のソリューションを提供しますか?Java6 JAXB2実装の実話は何ですか?それはSun(Oracle)の内部使用のためだけにありますか?

ありがとう。

4

2 に答える 2

0

EclipseLink JAXB(MOXy)は、@XmlSchemaアノテーションで宣言されている名前空間プレフィックスを使用します。

詳細については、以下を参照してください。

于 2011-01-26T17:28:16.723 に答える
0

コメントで述べたように、 http://www.func.nl/community/knowledgebase/customize-namespace-prefix-when-marshalling-jaxbで言及されていることを要約します。

注:私はこれを自分で試していないので、うまくいかないかもしれません。

基本的に、マーシャリング時に を使用するように JAXB マーシャラーをXMLStreamWriter構成し、プレフィックスをマップするように構成します。

XMLStreamWriter xmlStreamWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(writer);
xmlStreamWriter.setPrefix("func", "http://www.func.nl");

JAXBContext context = JAXBContext.newInstance(object.getClass());
Marshaller marshaller = context.createMarshaller();

marshaller.marshal(object, xmlStreamWriter);

JAXB にプレフィックス マッパーが与えられていない場合、JAXB はプレフィックスの処理を に任せXMLStreamWriter、上記の手順を実行することで、その方法を JAXB に伝えます。

繰り返しますが、私はあなたのネットワークからブロックされたウェブサイトのコンテンツを繰り返しているだけなので、それが正しいことを信用したり、間違っていることを責めたりすることはありません.

于 2011-01-05T12:41:46.060 に答える