2013-09-22 13 views
8

Ich habe ein Projekt, wo ich mit einer Reihe von Klassen von JAXB von einem XSD generiert arbeiten möchte. Mit diesen Klassen möchte ich aus XML und JSON Marshall/Marshall machen.jaxb.properties fehlt zur Laufzeit, wenn mit Maven

Ich habe herausgefunden, dass ich Moxy Eclipselink brauchen würde, um zu tun, was ich brauche. Ich testete meine Klassen und Prozesse als ein Ant-Projekt, dann entschied ich, es für eine bessere Verwaltung nach Maven zu verschieben.

Die Datei jaxb.properties scheint zur Laufzeit jedoch nicht erkannt zu werden.

Mein Projekt verfügt über ein Maven-Artefakt für die Objekte und ein weiteres Artefakt für die Logik/Verarbeitung. Ich habe mir die Haare ausgezogen, um herauszufinden, wo ich die jaxb.properties platzieren kann, damit sie gelesen werden können.

I

Objekte Projekt

/src/main/resources/jaxb.properties 
/src/main/java/[namespace]/jaxb.properties 

Logic Projekt

/src/main/resources/jaxb.properties 
/src/main/java/[namespace]/jaxb.properties 

jedoch versucht haben, wenn ich versuche, den Klassennamen meiner JAXBContext zu bekommen ich noch bekommen:

class com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl 

Wenn ich meine laufen Einstellungen ändern, indem Sie eine JVM-Option zu spezifizieren:

-Djavax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory 

ich:

class org.eclipse.persistence.jaxb.JAXBContext 

In beiden Projekten ich dies in der pom.xml angegeben haben

<build> 
     <resources> 
      <resource> 
       <directory>src/main/resources</directory> 
       <includes> 
        <include>**/*.properties</include> 
       </includes> 
      </resource> 
     </resources> 
</build> 

Wenn ich sehe Im JAR sehe ich jaxb.properties drin.

Root of JAR Jetzt bin ich verwirrt.

Antwort

11

Sie müssen sicherstellen, dass sich die Datei jaxb.properties im Ressourcenverzeichnis in derselben Paketstruktur wie die entsprechenden Modellklassen befindet.

Beispiel

+1

Blaise, danke für die GitHub-Verbindung. Nachdem ich die Struktur des Ordners gelesen hatte, begann es wirklich Sinn zu machen. Ich habe jaxb.properties in das richtige Paket eingefügt, und es hat super funktioniert! –

+1

Das war hilfreich für mich, ich habe ein Refactoring durchgeführt und die Modellklassen in meiner Anwendung verschoben, aber vergessen, die jaxb.properties zu verschieben. Die Paketstruktur muss exakt in der Ressourcenstruktur übereinstimmen. Meins war um ein Paket und alles kaputt. Dies ist ein sehr wichtiger Punkt. – Jon

+0

Danke sooo viel. Das war auch mein Problem. Deshalb liebe ich stackoverflow. Also, viele tolle Leute mögen dich zu helfen! – atom88

0

Beispiel in maven die Java-Klasse

src\main\java\com\example\sitemap\generate\domain 

und die Datei jaxb.properties

src\main\resources\com\example\sitemap\generate\domain\jaxb.properties