2

我谦虚地一步一步地请求你的帮助。

我正在开发一个由 apache maven 管理的项目。该项目有几个子模块

/pom.xml
/model/pom.xml
/server/pom.xml
/client/ws/pom.xml
/client/vaadin/pom.xml
  • server 和 ws 取决于模型
  • vaadin 依赖于 ws

  • “模型”项目我有使用 JPA 和 XML 注释进行注释的手写域类。下面的例子:

    包 com.example.domain.auth;

    @Entity
    @XmlType(name = "User", namespace = "auth.domain.example.com")
    @XmlAccessorType(javax.xml.bind.annotation.XmlAccessType.FIELD)
    public class User implements Serializable {
    
    @NotNull
    private String username;
    
    @NotNull
    private String password;
    
    @Temporal(value = TemporalType.DATE)
    private java.util.Date accountExpirationDate;
    
    public void veryComplexAction() { ... }
    
    // getters & setters
    

    }

  • “服务器”项目托管了几个使用域类作为输入和返回类型的 Web 服务。

  • "ws" (client/ws) 项目只是一个只有 WebService 客户端的项目。

项目建设完全由maven完成。(使用相对路径的 wsdls 的 wsgen 和 wsimport)

我无权访问 XSD 文件(我可以但是),因为它们是在“服务器”项目上执行 wsgen 插件期间生成的,并且生成了(半随机)名称,这些名称可以在开发过程中更改,因为它们是由生成的wsgen。

现在,由于我可以访问我的模型项目,我想在“ws”和“vaadin”项目中使用它,而无需使用没有我在“模型”项目中实现的方法的生成模型。

我发现我需要使用“episode”文件来指示 jaxb 编译器跳过生成域类。

问题是我无法让它工作,因为每个人都给出了 XSD 已经可用的示例,该示例在我的项目中是在构建过程中生成的,并且下一次构建中文件“UserService_schema1.xsd”的内容可以在文件“UserService_schemaN.xsd”中。

可接受的解决方案:

  • 在构建过程中生成静态 xsd,它们已明确提供名称并永远保持这种状态(即使重新生成)并使用这些 xsd 生成稍后在 wsimport 中使用的剧集文件或
  • 任何完全自动的解决方案,我可以键入“mvn clean package”,所有这些都将为我完成,例如:使用“模型”项目中的域模型生成静态 xsd、剧集、wsdls、Web 服务客户端包装类。(无需手动复制 java 文件或剧集文件)

我想得到什么(可能不仅是我)示例项目或关于如何在 web 服务客户端项目中重用现有域模型的分步教程,该项目作为 maven 项目的子模块进行管理。它甚至可以是一个类、接口、枚举。只是简单的 POJO 演示了如何配置所有内容。

我已经检查过的内容:

http://stackoverflow.com/questions/11745465/jaxb-my-own-domain-model-and-suggestions
http://stackoverflow.com/questions/15907973/how-to-remove-auto-generated-classes-in-jax-ws-clients/16007685#16007685
http://jamablog.blogspot.com/2007/08/how-to-make-jax-ws-client-to-reuse.html
http://jamablog.blogspot.com/2007/08/how-to-make-jax-ws-client-reuse.html
http://sr-it.eu/wordpress/?p=135
http://metro.1045641.n5.nabble.com/Reusing-entity-classes-with-JAX-WS-bottom-up-td1061083.html
4

1 回答 1

0

我们有类似的设置。我们将 eclipse 链接和 apache cxf 与 jaxws 一起使用。我们不生成客户端模型。我们正在使用现有的域对象。EclipseLink 帮助您在 XML 文件中注释域对象。因为我们的域对象在一个单独的 jar 中,所以我们不对域对象进行注释,而是使用 ws 项目中的一个 xml 文件来指定如何解释域对象。

我没有把它放在一起,所以无法为您提供分步说明。

于 2013-10-09T21:08:36.573 回答