Java 具有Web服务的客户端/服务器。如何在项目设置中处理生成的源?

Java 具有Web服务的客户端/服务器。如何在项目设置中处理生成的源?,java,web-services,maven,wsdl,Java,Web Services,Maven,Wsdl,我正在开发一个简单的客户机-服务器应用程序 服务器端是一个web服务,通过一个wsdl文件很好地部署到应用服务器 我的另一个项目客户机(假设它是用Swing编写的)调用这些web服务方法。因为这些web服务方法使用自定义对象(不仅仅是字符串int等等),所以我需要从web服务项目生成源文件 在我的Maven POM文件中,处理生成的源文件的最佳方法是什么 在客户端项目上调用wsimport 在服务器项目上调用wsimport,然后以某种方式复制到客户端项目 在客户端项目上调用wsgen 调用服务

我正在开发一个简单的客户机-服务器应用程序

服务器端是一个web服务,通过一个wsdl文件很好地部署到应用服务器

我的另一个项目客户机(假设它是用Swing编写的)调用这些web服务方法。因为这些web服务方法使用自定义对象(不仅仅是字符串int等等),所以我需要从web服务项目生成源文件

在我的Maven POM文件中,处理生成的源文件的最佳方法是什么

  • 在客户端项目上调用wsimport
  • 在服务器项目上调用wsimport,然后以某种方式复制到客户端项目
  • 在客户端项目上调用wsgen
  • 调用服务器项目上的wsgen,然后以某种方式复制到客户端项目

  • 按照我的理解,wsgen从web服务java类(用@Webservice注释)创建所有生成的文件,而wsimport从wsdl文件中创建这些文件。

    对于Maven,您可以使用插件来实现这一点。 请参见下面的示例,了解如何从Java代码转换wsdl

    <plugin>  
          <groupId>org.apache.cxf</groupId>  
          <artifactId>cxf-java2ws-plugin</artifactId>  
          <version>2.6.3</version>  
    
          <dependencies>  
            <dependency>  
                <groupId>org.apache.cxf</groupId>  
                <artifactId>cxf-rt-frontend-jaxws</artifactId>  
                <version>${version.cxf}</version>  
            </dependency>  
            <dependency>  
                <groupId>org.apache.cxf</groupId>  
                <artifactId>cxf-rt-frontend-simple</artifactId>  
                <version>${version.cxf}</version>  
            </dependency>  
          </dependencies>  
    
          <executions>  
            <execution>  
              <id>process-classes</id>  
              <phase>process-sources</phase>  
                <configuration>  
                  <className>com.Mycompany.name.work</className>  
                  <outputFile>${project.build.sourceDirectory}/wsdl/work.wsdl</outputFile>  
                  <genWsdl>true</genWsdl>  
                  <verbose>true</verbose>  
                </configuration>  
                <goals>  
                  <goal>java2ws</goal>  
                </goals>  
              </execution>  
          </executions>  
    
        </plugin> 
    
    
    org.apache.cxf
    cxf-java2ws-plugin
    2.6.3  
    org.apache.cxf
    cxf rt前端jaxws
    ${version.cxf}
    org.apache.cxf
    cxf rt前端简单
    ${version.cxf}
    进程类
    过程源
    com.Mycompany.name.work
    ${project.build.sourceDirectory}/wsdl/work.wsdl
    真的
    真的
    java2ws
    
    还有一种方法可以实现这一点。您可以预先从WSDL生成类,并将其转换为jar文件。在该jar的pom文件中添加java依赖项。
    如果希望更频繁地更改WSDl位置,可以更改服务类以从属性文件读取Web服务Url。这样,您也可以灵活地更改WSDL位置。

    通常,我使用的工具是一个为您的WSDL构建库(Jar)的项目


    然后我会将其部署到我的Maven存储库中,并在POM文件中创建一个依赖项以将其拉入。

    您的意思是您将有3个项目。客户机/服务器,然后是一个只生成WSDL工件并将其打包到jar中的项目?通常是的。两者都需要引用相同的工件。以模块化的名义,它们应该是独立的。这样,您就可以将您的API(WSDL)免费分发给您可能需要的任何其他项目。在这里,我们可以将其与MVC风格的角色分离做一个相当紧密的类比。WSDL gen对象是您的模型。客户端是您的视图,服务器是您的控制器。