2008-09-25 17 views
2

Ich habe eine Webanwendung, die JAXB 2 verwendet. Wenn auf einem Oracle 10g App Server bereitgestellt, erhalte ich Fehler, sobald ich versuche, eine XML-Datei zu marshallen. Es stellt sich heraus, dass Oracle JAXB 1 in einem Glas enthält, das heimlich in "xml.jar" umbenannt wird. Wer weiß, wie ich meine Webanwendung dazu zwingen kann, die Version von jaxb jars, die ich in web-inf/lib implementiert habe, über das zu verwenden, was Oracle in den Klassenpfad gezwungen hat, idealerweise durch Konfiguration, anstatt mit Classloadern in meinem Code herumzuärgern .JAXB 2 in einer Oracle 10g Webapp

Antwort

0

Verwenden Sie eine andere JVM als Ihre Oracle-Instanz und stellen Sie sicher, dass ihre Bibliotheken nicht in Ihrem Klassenpfad enthalten sind.

+0

Denke nicht, dass das wirklich eine Option ist - die Webanwendung wird im Oracle 10g-Anwendungscontainer bereitgestellt und ist daher an diese JVM gebunden. – alexmcchessers

2

Ich nehme an, Sie verwenden den ehemaligen BEA Weblogic Server?

Sie können eine weblogic.xml Datei auf Ihrem WEB-INF hinzufügen, wie folgt aussehen:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 8.1//EN" "http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd"> 
<weblogic-web-app> 
    <container-descriptor> 
    <prefer-web-inf-classes>true</prefer-web-inf-classes> 
    </container-descriptor> 
</weblogic-web-app> 

(in Antwort auf den Kommentar, ich habe nicht genug Ruf noch :-))

In der Tat, DLL-Hölle, weil es "alles oder nichts" ist. Es scheint einen anderen, bedingteren Weg zu geben, beschrieben here. Ich habe das selbst nicht versucht ...

+0

Eine gute Antwort, die wahrscheinlich mein Problem in jeder vernünftigen Welt lösen würde. Es stellte sich heraus, dass wir diese Einstellung hatten (ich wusste nicht, dass 10g auf Weblogic basiert), aber einer aus meinem Team sagt mir, dass es weggenommen wurde, weil es etwas anderes kaputt gemacht hat. DLL-Hölle noch einmal. Seufzer. Danke trotzdem. – alexmcchessers

+0

Ok, um mir selbst zu widersprechen, habe ich versucht, 10g zu konfigurieren, um meine Webapp-Klassen zu bevorzugen, und jetzt einen anderen Fehler zu bekommen - siehe diese Frage: http://StackOverflow.com/Questions/133993/Loader-Constraints-Violated-When-Linking -javaxxmlnamespaceqname-class-from-weba – alexmcchessers

1

Wenn Sie immer noch Oracle OC4J verwenden, dann fügen Sie ihre orion-application.xml in die EAR META-INF. Es sollte ungefähr so ​​aussehen ...

<?xml version="1.0" encoding="UTF-8"?> 
<orion-application> 
    <imported-shared-libraries> 
     <remove-inherited name="skip.this.package"/> 
    </imported-shared-libraries> 
</orion-application> 

... mit dem Paket, das Sie überspringen möchten.