我谦虚地一步一步地请求你的帮助。
我正在开发一个由 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