maven - Axis2 与 Maven 的最佳实践

标签 maven code-generation axis2

我是 Maven 和 Axis2 的新手。我的项目由三个模块组成:客户端、接口(interface)和服务器。服务是基于 POJO 的。 WSDL 正在服务器模块中构建。接口(interface)模块包含常见的东西,如服务接口(interface)和 bean。

我应该将 WSDL 生成(或手动复制)到接口(interface)模块中吗?我应该在客户端模块生成客户端代码吗?模块结构好吗?我想做的就是使构建过程自动化但结构严格。

最佳答案

结果不会清除您称为“接口(interface)”的组件。
对于 Web 服务构建,主要有两种方法:

  • 从 wsdl(即契约/或服务接口(interface)描述符)开始
  • 从代码开始(可能是java接口(interface))

  • 我建议第一种方法,因为并非总是可以控制开发的双方。您可以使用第二种方法从 wsdl 定义 (java2wsdl) 开始,或者使用 altova xmlspy 工具构建 wsdl。

    有了 wsdl,您可以使用 axis2-maven wsdl2code 插件来开发 WSS(Web 服务服务器端)。 2.6.0 版中的这个插件只生成服务器的源代码,但您需要将此代码托管在axis2-war 发行版中或作为aar 组件。

    有了 wsdl,您可以再次使用 axis2-maven wsdl2code 插件来生成 WSC(Web 服务客户端)。您可以在插件指令中指定要生成测试代码。您可以使用 mvn generate-sources 生成客户端 stub ,移动生成的源并修改测试。

    在这两种情况下,都需要构建初始的pom(这次我还没有找到官方统一或推荐的pom)。您可以在 google 中搜索一些 pom.xml Axis 示例(即:http://wso2.org/library/90)。

    下面我有一些可用于构建 pom (WSC) 的 xml:
        <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
          <modelVersion>4.0.0</modelVersion>
          <groupId>your_group_id</groupId>
          <artifactId>your_artifact_id</artifactId>
          <packaging>jar</packaging>
          <version>1.0-SNAPSHOT</version>
          <name>your_artifact_id</name>
          <url>http://your_url</url>
          <dependencies>
            <dependency>
              <groupId>junit</groupId>
              <artifactId>junit</artifactId>
              <version>4.8.1</version>
              <scope>test</scope>
            </dependency>
    
            <dependency>
              <groupId>javax.servlet</groupId>
              <artifactId>servlet-api</artifactId>
              <version>2.5</version>
              <scope>provided</scope>
            </dependency>
            <dependency>
              <groupId>javax.servlet.jsp</groupId>
              <artifactId>jsp-api</artifactId>
              <version>2.1</version>
              <scope>provided</scope>
            </dependency>
    
            <!-- axis2/axiom: dependencies -->
            <dependency>
                  <groupId>org.apache.axis2</groupId>
                  <artifactId>axis2</artifactId>
                  <version>${axis2.version}</version>
            </dependency>
            <dependency>  
               <groupId>org.apache.axis2</groupId>  
               <artifactId>axis2-transport-local</artifactId>  
               <version>${axis2.version}</version>  
            </dependency>
            <dependency>  
               <groupId>org.apache.axis2</groupId>  
               <artifactId>axis2-transport-http</artifactId>  
               <version>${axis2.version}</version>  
            </dependency>         
            <dependency>
                <groupId>org.apache.axis2</groupId>
                <artifactId>axis2-codegen</artifactId>
                <version>${axis2.version}</version>
                <scope>provided</scope>
            </dependency>   
    
            <!-- axis2-rampart: dependencies -->
            <dependency>
                <groupId>org.apache.rampart</groupId>
                <artifactId>rampart-core</artifactId>
                <version>${axis2.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-jdk14</artifactId>
                    </exclusion>
                    <exclusion>
                        <artifactId>log4j-over-slf4j</artifactId>
                        <groupId>org.slf4j</groupId>
                    </exclusion>
                </exclusions>
            </dependency>
            <!-- slf4j: dependencies -->
            <dependency>
              <groupId>org.slf4j</groupId>
              <artifactId>slf4j-api</artifactId>
              <version>${slf4j.version}</version>
            </dependency>
            <dependency>
              <groupId>org.slf4j</groupId>
              <artifactId>slf4j-log4j12</artifactId>
              <version>${slf4j.version}</version>
              <!-- 
              <scope>runtime</scope>
              -->
              <exclusions>
                <exclusion>
                    <artifactId>log4j</artifactId>
                    <groupId>log4j</groupId>
                </exclusion>
              </exclusions>
            </dependency> 
            <dependency>
              <groupId>org.slf4j</groupId>
              <artifactId>jcl-over-slf4j</artifactId>
              <version>${slf4j.version}</version>
            </dependency>
            <!-- log4j: dependencies -->
            <dependency>
              <groupId>log4j</groupId>
              <artifactId>log4j</artifactId>
              <version>${log4j.version}</version>
              <exclusions>
                <exclusion>
                    <artifactId>jmxtools</artifactId>
                    <groupId>com.sun.jdmk</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>jmxri</artifactId>
                    <groupId>com.sun.jmx</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>mail</artifactId>
                    <groupId>javax.mail</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>jms</artifactId>
                    <groupId>javax.jms</groupId>
                </exclusion>
              </exclusions>
            </dependency>
    
            <!-- other: dependencies -->
          </dependencies>
    
    
          <build>
            <plugins>
              <plugin>
                  <groupId>org.mortbay.jetty</groupId>
                  <artifactId>maven-jetty-plugin</artifactId>
              </plugin>
              <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.0.2</version>
                <configuration>
                  <source>1.6</source>
                  <target>1.6</target>
                </configuration>
              </plugin>
              <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.0.2</version>
                <configuration>
                  <warName>${project.artifactId}</warName>
                </configuration>
              </plugin>
    
              <plugin>
                  <groupId>org.apache.axis2</groupId>
                  <artifactId>axis2-wsdl2code-maven-plugin</artifactId>
                  <version>${axis2.version}</version>
                  <executions>
                      <execution>
                        <id>wsc_01</id>
                        <goals>
                            <goal>wsdl2code</goal>
                        </goals>
                        <configuration>
                            <wsdlFile>${codegen.wsc_01.wsdl-uri}</wsdlFile>
                            <packageName>${codegen.wsc_01.package-name}</packageName>
                            <namespaceToPackages>${codegen.wsc_01.namespace-map}</namespaceToPackages>
                            <outputDirectory>${codegen.wsc.target-dir}</outputDirectory>
                            <databindingName>adb</databindingName>
                            <syncMode>sync</syncMode>
                            <generateServerSide>false</generateServerSide>
                            <generateServicesXml>true</generateServicesXml>
                            <generateTestcase>true</generateTestcase>
                            <language>java</language>
                        </configuration>
                      </execution>
                      <!-- other wsc-generation params -->
                  </executions>
              </plugin> 
    
            </plugins>
    
          </build>
    
            <properties>
                <slf4j.version>1.6.3</slf4j.version>  
                <log4j.version>1.2.15</log4j.version>
                <axis2.version>1.6.0</axis2.version>
                <rampart.version>1.6.0</rampart.version>
    
                <!-- codegen.client.properties -->
    
                <codegen.wsc_01.wsdl-uri>wsdl_relative_path_or_url</codegen.wsc_01.wsdl-uri>
                <codegen.wsc_01.package-name>your_root_package</codegen.wsc_01.package-name>
                <codegen.wsc_01.namespace-map>http://your_url_namespace=your_java_namespace_mapped</codegen.wsc_01.namespace-map>
    
                <codegen.wsc.target-dir>target/generated-sources/axis2/wsdl2code</codegen.wsc.target-dir>
            </properties>
            <dependencyManagement>
                <dependencies>
                    <dependency>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-jdk14</artifactId>
                        <version>1.5.2</version>
                    </dependency>
                </dependencies>
            </dependencyManagement>
        </project>
    

    关于maven - Axis2 与 Maven 的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10613290/

    相关文章:

    maven:如何通过命令行选项跳过某些项目中的测试?

    java - Angular7 + maven 出现 IBM websphere 错误(frontend-maven-plugin :1. 0:npm(npm 安装失败))

    java - 微服务Maven项目结构

    java - war 中的类(Class)有没有办法从它的耳朵访问 META-INF?

    scala - 无法从 "Full Configuration"生成带有 SBT 0.11 的源代码

    Java Webservice 客户端(最佳方式)

    web-services - 如何通过 Web 服务传输 java.util.Map?

    serialization - Julia:在运行时生成代码并将其存储以供将来评估/执行

    java - 如何创建一个 bytebuddy 代理来拦截带注释字段的字段 setter ?

    java - 具有基本身份验证的 wsdl2java (Axis 1.6.1)