Bonjour à tous,

Comment peut-on forcer l'utilisation d'une classe existante ailleurs comme superclasse ?

Contexte: Je travaille sur deux projets Maven : "A" et "C".

Dans le projet "A", j'ai la classe "Animal". Le bean d'Animal a été généré avec "jaxb2-maven-plugin" depuis Maven. Et le XSD d'Animal ressemble au suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
<?xml version="1.0"  encoding="UTF-8"?>
<xs:schema version="1.0"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:com="http://xsd.masociete.com/common/"
    elementFormDefault="qualified"
    targetNamespace="http://xsd.masociete.com/common/">
 
    <xs:element name="animal" type="com:animal"/>
 
    <xs:complexType name="animal">
        <xs:annotation>
            <xs:documentation>An animal</xs:documentation>
        </xs:annotation>
        <xs:choice>
            ...
        </xs:choice>
    </xs:complexType>
 
    ...
 
</xs:schema>
Dans mon "pom.xml", la conf est la suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
<plugin>
	<groupId>org.codehaus.mojo</groupId>
	<artifactId>jaxb2-maven-plugin</artifactId>
	<version>${jaxb2-maven-plugin.version}</version>
	<executions>
		<execution>
			<id>xjc</id>
			<goals>
				<goal>xjc</goal>
			</goals>
		</execution>
	</executions>
	<configuration>
		<schemaFiles>animal.xsd</schemaFiles>
		<packageName>com.masociete.jaxb</packageName>
	</configuration>
</plugin>
Dans mon projet "C", qui dépend de "A". J'ai un bean Chien défini en XSD aussi :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"
	xmlns:mda="http://masociete.com/c/jaxb" xmlns:com="http://masociete.com/common/"
	targetNamespace="http://masociete.com/c/jaxb" elementFormDefault="qualified">
 
	<xs:import schemaLocation="animal.xsd" namespace="http://masociete/common/"/>
 
	<xs:include schemaLocation="..." />
 
 
	<xs:element name="chien">
		<xs:complexType>
			<xs:annotation>
				<xs:documentation>Chien</xs:documentation>
			</xs:annotation>
			<xs:complexContent>
				<xs:extension base="com:animal">
					<xs:sequence>
						...
					</xs:sequence>
				</xs:extension>
			</xs:complexContent>
		</xs:complexType>
	</xs:element>
Dans mon pom.xml, la conf est la suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
<plugin>
	<groupId>org.codehaus.mojo</groupId>
	<artifactId>jaxb2-maven-plugin</artifactId>
	<version>${jaxb2-maven-plugin.version}</version>
	<executions>
		<execution>
			<id>xjc</id>
			<goals>
				<goal>xjc</goal>
			</goals>
		</execution>
	</executions>
	<configuration>
		<schemaFiles>chien.xsd,chat.xsd...</schemaFiles>
		<packageName>com.masociete.c.jaxb</packageName>
	</configuration>
</plugin>
Mais ça me pose deux soucis :
1) Je dois copier "animal.xsd" de "A" vers "C" pour que ça fonctionne ;
2) Ca me crée "Animal.java" dans le package "com.masociete.c.jaxb", alors que je l'ai déjà dans "com.masociete.jaxb".

Au final, ce que j'aurais voulu, c'est un bean généré qui ressemble au suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
package om.masociete.c.jaxb
...
 
public class Chien extends com.masociete.jaxb.animal {
	...
}
Toute aide sera la bienvenue...

Merci d'avance,
Thierry