首页 > 解决方案 > 生成类的自定义包名axis2-wsdl2code-maven-plugin

问题描述

在尝试了解 wsdl2java 插件的工作原理后,我了解到在 pom 的配置中,我们指定了将从 wsdl 生成骨架的包名。

<goals>
   <goal>wsdl2code</goal>
</goals>
<configuration>
    <packageName>com.a.b.c.d</packageName>
    <wsdlFile>${project.build.directory}/../src/main/webapp/WEB-INF/c/d/META-INF/wsdlfile.wsdl</wsdlFile>
</configuration>

至于类,WSDL文件导入xsd命名空间,类生成在两个以命名空间为名称的package中。第一个是命名空间/公共,第二个命名空间/类型

<wsdl:definitions xmlns:ns="http://a.b.c.d.com" xmlns:ns3="http://a.b.c.d.com/types" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" targetNamespace="http://a.b.c.d.com">
<wsdl:types>
    <xs:schema xmlns:stn_51="http://a.b.c.d.com/publics" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:types="http://a.b.c.d.com/types" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://a.b.c.d.com/types">
        <xs:import namespace="http://a.b.c.d.com/publics" schemaLocation="xsd0.xsd" />

问题是包名与另一个模块中的包名相同,这会导致混淆。wsdl2java 中是否有解决此问题的选项?或者有没有办法使用wsdl解决这个问题?

标签: xmlxsdwsdlaxis2wsdl2java

解决方案


所以我必须通过查看 wsdl2code 的文档来解决这个问题,在该文档中我发现了这个标签:NamespaceURLs。它允许您指定命名空间列表,每个命名空间都有一个特定的包名称。这是一个如何在 POM 中使用它的示例。

<execution>
                    <id>...</id>
                    <goals>
                        <goal>wsdl2code</goal>
                    </goals>
                    <configuration>
                    <namespaceURIs>
                      <namespaceURI>
                        <uri>http://a.b.c.d.com/publics</uri>
                        <packageName>com.d.c.b.a.service-a.publics</packageName>
                      </namespaceURI>

                    </namespaceURIs>
                        <packageName>com.d.c.b.a.service-a</packageName>
                        <wsdlFile>...</wsdlFile>
                    </configuration>
                </execution>

推荐阅读