wsimport - 如何在单独的项目/文件夹中生成服务端点类和JAXB类

Pra*_*adB 11 java web-services jax-ws jaxb wsimport

对于具有多个Web服务(多个WSDL)的项目,我们使用自上而下的方法.每个Web服务都需要设置为单独的项目,并作为单独的战争部署.

问题是WSDL共享一些常见的.xsd文件.目前,如果我们为每个WSDL运行wsimport,则每个Web服务项目中都会复制常见的JAXB类.

理想情况下,我们希望在公共共享项目中单独生成JAXB类,然后在每个Web服务项目中重用JAXB类项目,但wsimport不提供跳过JAXB类生成或指定其他位置的选项对于JAXB类.

关于如何在不同的JAX-WS Web服务端点之间共享JAXB类的任何想法?

Bri*_*eck 14

我知道这个问题很老,但我想分享那些正在寻找的答案.我知道我花了一段时间才找到答案.

从JAXB 2.1 RI开始,有一个名为"剧集"的功能可以用来促进这一点.

假设您有一个名为myschema.xsd的模式.然后你想要调用以下内容:

xjc -episode myschema.episode myschema.xsd
Run Code Online (Sandbox Code Playgroud)

如果您使用单个调用编译多个xsd文件,这也适用.该调用将生成绑定以及myschema.episode文件.

剧集文件是一个特殊的绑定文件.然后,您可以将此文件与wsimport一起使用,如下所示:

wsimport mywsdl.wsdl -b myschema.episode
Run Code Online (Sandbox Code Playgroud)

wsimport现在将使用以前生成的JAXB文件,并将生成任何缺失的内容.

有关更多信息,请参阅此页面.


dma*_*a_k 7

您可以使用JAXB/JAX-WS自定义来实现此目的.假设您已将WSSD 嵌入到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>
Run Code Online (Sandbox Code Playgroud)

以上配置引用以下项目目录结构:

+-- binding
|   +-- jaxws-binding.xml
+-- wsdl
|   +-- some.wsdl
+-- src
    ...
Run Code Online (Sandbox Code Playgroud)

如果您使用org.codehaus.mojo:jaxws-maven-plugin插件,则需要指定<bindingDirectory>binding</bindingDirectory>.

如果您的XSD是WSDL的外部,那么您需要单独指定自定义:

+-- binding
|   +-- jaxb-binding.xml
|   +-- jaxws-binding.xml
+-- wsdl
    ...
Run Code Online (Sandbox Code Playgroud)

然后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>
Run Code Online (Sandbox Code Playgroud)
  • 对于Ant构建,您只需为不同的包生成两个罐子.
  • 因为我个人不知道从一个Maven项目创建两个JAR文件的任何方法:)然后最简单的解决方案是你在project-beans项目中从XSD生成JAXB类,并在project-wswsimport运行后删除生成的JAXB类(你可以使用)蚂蚁插件).

  • 非常有用,尤其是您需要为导入的模式提供单独的绑定文件.谢谢! (2认同)