见下文,我提到了3个项目。
Common
Age.xsd (namespace: http://xmlns.common/age)
generated/common/xmlns/age/AgeType.java
pom.xml (cxf-xjc-plugin xsdtojava)
Person
PersonService.wsdl (imports Age.xsd in wsd:types)
generated/com/person/AgeType.java
pom.xml (cxf-codegen-plugin wsdl2java)
Animal
AnimalService.wsdl (imports Age.xsd in wsd:types)
generated/com/animal/AgeType.java
pom.xml (cxf-codegen-plugin wsdl2java)
AnimalService.wsdl
和PersonService.wsdl
都将导入Age.xsd模式,如下所述:<wsdl:definitions xmlns:cn="http://xmlns.common/age"
<wsdl:types>
<xsd:schema>
<xsd:import
namespace="http://xmlns.common/age"
schemaLocation="classpath:/common/xmlns/age/Age.xsd" />
</xsd:import>
</xsd:schema>
<!-- cn:AgeType used in output message -->
<!-- ignored -->
</wsdl:definitions>
题:
如何通过将
cxf-codegen wsdl2java
项目提供给来为 AgeType(位于名称空间http://xmlns.common/age中)生成代码,而不是通过提供Common
项目在相应项目中使用common.xmlns.age.AgeType而不是com.person.AgeType和com.animal.AgeType。作为依赖? 最佳答案
找到了答案。我们需要按如下方式在-nexclude
中使用extraarg
,并将Common
项目依赖项添加到Animal
和Person
项目中。
<wsdlOptions>
<wsdlOption>
<wsdl>${project.basedir}/src/main/resources/Animal.wsdl</wsdl>
<wsdlLocation>classpath:Animal.wsdl</wsdlLocation>
<extraargs>
<extraarg>-nexclude</extraarg>
<extraarg>http://xmlns.common/age=common.xmlns.age</extraarg>
</extraargs>
</wsdlOption>
</wsdlOptions>
语法为:
<extraarg>-nexlude</extraarg>
<extraarg>namespace to be excluded=package where the JAXB generated classes available</extraarg>