[试图理解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命名空间,并且这些类在以名称空间为名称的两个包s中生成。第一个是名称空间/公共,第二个是名称空间/类型
<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解决此问题?
因此,我需要查看wsdl2code的文档来解决此问题,在该文档中找到了有关此标记的名称空间URL。它允许您指定一个名称空间列表,每个名称空间都有一个特定的程序包名称。这是如何在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>