您可以使用JAXB / JAX-WS定制来实现这一点。假设您将 XSD 类型嵌入到 WSDL 中。然后您的自定义将如下所示:
<jaxws:bindings version="2.0"
xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
wsdlLocation="../wsdl/some.wsdl">
<jaxws:package name="org.company.project.ws" />
<!-- XSD types customization within WSDL -->
<jaxb:bindings node="//xsd:schema">
<jaxb:schemaBindings>
<jaxb:package name="org.company.project.beans" />
</jaxb:schemaBindings>
</jaxb:bindings>
</jaxws:bindings>
上述配置参考如下项目目录结构:
+-- binding
| +-- jaxws-binding.xml
+-- wsdl
| +-- some.wsdl
+-- src
...
如果你使用org.codehaus.mojo:jaxws-maven-plugin
插件,那么你需要指定<bindingDirectory>binding</bindingDirectory>
.
如果您的 XSD 在 WSDL 之外,那么您需要单独指定自定义:
+-- binding
| +-- jaxb-binding.xml
| +-- jaxws-binding.xml
+-- wsdl
...
然后jaxb-binding.xml
看起来像:
<jaxb:bindings version="1.0"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<jaxb:bindings schemaLocation="my.xsd" node="//xsd:schema">
<jaxb:schemaBindings>
<jaxb:package name="org.company.project.beans" />
</jaxb:schemaBindings>
</jaxb:bindings>
</jaxb:bindings>
- 对于 Ant 构建,您只需为不同的包生成两个 jar。
- 因为我个人不知道从一个 Maven 项目创建两个 JAR 工件的任何方法:) 那么最简单的解决方案是让您在项目中从 XSD 生成 JAXB 类,
project-beans
并在project-ws
项目中在 wsimport 运行后删除生成的 JAXB 类(您可以使用ant 插件)。