Soap SpringWS的Maven项目,用于创建服务器WAR/EAR和客户端JAR的JAXB/XSD,还可以从XSD自动生成类
可能很难确切地解释我想要什么,所以请让我一步一步地做 我们公司有一个长期存在的Java项目,它使用SpringWS、XSD文件从WSDL生成WSDL和那些bean。该项目是使用ANT编译/构建的,具有各种目标(一个目标从XSD生成类,另一个目标生成客户机JAR,另一个目标生成服务器WAR/EAR)。该项目用于运行SOAP服务器,还用于生成客户端JAR。但现在已经没有单一的代码源了,大量预先生成的客户端jar正在四处传播。我需要用Maven清理这个烂摊子 我创建了模块化Maven项目,但基本上唯一真正的子项目是包含所有自定义代码、所有XSD等的项目(另一个子项目只是从第一个项目生成的WAR中打包EAR)。由于该项目使用SpringWS,所以在服务器上运行时会动态生成最终的WSDL文件 到目前为止,我所做的是:Soap SpringWS的Maven项目,用于创建服务器WAR/EAR和客户端JAR的JAXB/XSD,还可以从XSD自动生成类,soap,maven,jaxb,spring-ws,Soap,Maven,Jaxb,Spring Ws,可能很难确切地解释我想要什么,所以请让我一步一步地做 我们公司有一个长期存在的Java项目,它使用SpringWS、XSD文件从WSDL生成WSDL和那些bean。该项目是使用ANT编译/构建的,具有各种目标(一个目标从XSD生成类,另一个目标生成客户机JAR,另一个目标生成服务器WAR/EAR)。该项目用于运行SOAP服务器,还用于生成客户端JAR。但现在已经没有单一的代码源了,大量预先生成的客户端jar正在四处传播。我需要用Maven清理这个烂摊子 我创建了模块化Maven项目,但基本上唯一
- 手动从XSD生成类,将这些类添加到/src/main/java,以便永久存储它们,让Maven生成服务端架构(WAR/EAR)的其余部分
- 单独使用从运行服务器导入的WSDL文件,使用EclipseWTP插件生成客户机JAR文件(创建新项目,将WSDL放入其中,使用WTP插件生成文件,然后将项目导出到最终JAR文件),然后将此JAR分发给相关方
- 创建承载XSD文件的Maven项目
- 使用它来生成类和客户机JAR
- 从服务器端项目引用此项目,以便服务器端代码可以引用生成的类
- 服务器端项目将使用SpringWS并能够生成EAR文件
Nikolay为刚刚的XSD使用一个单独的项目,并使用从XSD生成的类构建另一个JAR。您最终拥有3个项目:
- XSD模式项目
- 客户端JAR
- 服务器项目
编辑:要从wsdl和XML模式生成类,可以使用(wsimport目标)和/或。我们从xsd生成大量代码。因为我们不需要重复的代码,所以我们使用XML目录和一个自定义模式解析器,它可以从类路径解析模式;我相当肯定apache有一个模式分解器也可以做到这一点——我记得在我们编写我们的模式分解器之后找到了它。通过这种方式,一个模块可以通过将另一个模块的工件声明为依赖项来引用该架构。您是否建议使用该架构解析器在运行的服务器上生成最终的wsdl?我们目前使用Spring的CommonsXsdSchemaCollection,它从Apache实现XsdSchemaCollection。我将检查这个类是否可以查找类路径而不是文件位置(我们当前使用的)来获取源XSD文件。如果这是可行的,这可能是我们的解决方案!ThanksHow您是否从模式生成WSDL?你问题的这一方面让我很困惑。Spring在运行时确实如此。我假设CommonsXsdSchemaCollection类(或其他一些bean)负责这一点,因为它被配置为带有这些XSD的bean。我继承了这个项目,但仍在努力找出如何改进EthatAnks以获得良好的参考(shade),它可能有助于打包最终的JAR/EAR文件。我仍然需要弄清楚如何生成wsdl(tdrury@has suggestion)以及如何自动生成实际的SOAP客户端——还记得我说过我们使用Eclipse的WTP插件来实现这一点吗?它实际上生成了一些用于调用服务器的存根,而不仅仅是来自WSDL的类。我希望Maven也能调用自动生成。谢谢你的意见@Nikolay添加了到JAX-WS/JAXB插件的链接,它们应该有助于从WSDL/XML模式生成类。来自JAX-WS-commons的JAX-WS正在使用其他库,因此生成的客户机JAR与axis不兼容。我必须找到使用axis的方法。我发现了这个相当过时的插件,它使用的似乎是版本1o