指示wsimport / jaxb使用现有的模型/域类

时间:2013-09-04 22:56:38

标签: java maven jax-ws wsimport jaxb-episode

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

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

/pom.xml
/model/pom.xml
/server/pom.xml
/client/ws/pom.xml
/client/vaadin/pom.xml
  • 服务器和ws取决于型号
  • vaadin取决于ws

  • “model”项目我有手写的域类,使用JPA和XML注释进行注释。示例如下:

    package 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
    

    }

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

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

项目建设由maven共同完成。 (wsgen& wsimport of wsdls using relative paths)

我无法访问XSD文件(我做的却是),因为它们是在“服务器”项目执行wsgen插件时生成的,并且生成了(半随机)名称,这些名称可能会在开发过程中发生变化,因为它们是'由wsgen生成。

既然我可以访问我的模型项目,我想在“ws”和“vaadin”项目中使用它,而不需要使用生成的模型,这些模型没有我在“模型”项目中实现的方法

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

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

可接受的解决方案:

  • 在构建过程中生成静态xsd,它们已明确提供名称并永远保持这样(即使重新生成)并使用那些xsd生成wsimport中使用的剧集文件 或
  • 任何完全自动的解决方案,我可以输入“mvn clean package”,所有这些都将为我完成:使用“model”项目中的域模型生成静态xsd,episodes,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

1 个答案:

答案 0 :(得分:0)

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

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