在另一个maven项目中使用JAXB2生成java类

时间:2014-04-19 23:01:10

标签: java spring maven jaxb spring-ws

有人可以帮我解决我的问题吗?

我有两个maven项目A和B. 我希望项目A包含我的所有模型类,而在项目B中我正在使用Spring WS创建一个契约优先的Web服务。所以在项目B中,我使用maven-jaxb2-plugin从我的模式生成类。碰巧我的webservice项目(项目A)中的生成类与我的模型项目(项目A)中的生成类相同(没有XML注释)。

因为我不希望在我的Web服务项目(项目B)中有重复的类,所以我决定让这个项目依赖于模型项目(项目A)以及我想要的下一步,而不是再生成类webservice项目,但是模型项目(项目A)。

你认为没有其他方法可以做到这一点吗? 如果有可能,有人可以帮助我这样做吗?

项目A

package project.a;

public class Client {
  //...
}


项目B

package project.b;

public class Compte {
  //This class manipulates a Client object
  //...
}


JAXB2 Maven插件

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>jaxb2-maven-plugin</artifactId>
  <version>1.6</version>
  <executions>
    <execution>
      <id>xjc</id>
      <goals>
        <goal>xjc</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <outputDirectory>src/main/java</outputDirectory>
    <packageName>project.a</packageName>
    <schemaDirectory>src/main/webapp/WEB-INF/schemas</schemaDirectory>
    <clearOutputDir>false</clearOutputDir>
  </configuration>
<plugin>


模式

<element name="client">
  <complexType>
    <sequence>
      <!--  -->
    </sequence>
  </complexType>
</element>

Project B spring bean配置

<bean class="org.springframework.ws.client.core.WebServiceTemplate">
  <property name="marshaller" ref="marshaller"/>
  <property name="unmarshaller" ref="marshaller"/>
  <property name="defaultUri" value="http://localhost:8080/project/" />
</bean>
<bean id="marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
  <property name="contextPath" value="project.a"/>
</bean>

1 个答案:

答案 0 :(得分:0)

您不必再次重新创建模型类。只需将它们放在项目A中,然后将这些bean导入到项目B中:

    <import resource="classpath:projectABeanDefinitionFile.xml" />

假设您正在Compte类上实现/转到@XmlRootElement(否则建议您阅读像here这样的教程), 然后将项目B文件更改为:

    <bean id="marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
      <property name="classesToBeBound" value="project.b.Compte"/>
    </bean>