如何使用类自定义来解决文件生成冲突

我正在尝试使用Maven生成供Spring框架使用的JAXB文件,但Maven显示以下错误:

我知道它无法生成带有名称的文件,但我不知道如何解决这个问题。 到目前为止,我访问了以下链接。 1,2,3

org.xml.sax.SAXParseException; systemId: http://www5v80.elsyarres.net/service.asmx?wsdl; lineNumber: 5; columnNumber: 39; A class/interface with the same name "hello.wsdl.SearchFlights" is already in use. Use a class customization to resolve this conflict. .... org.xml.sax.SAXParseException; systemId: http://www5v80.elsyarres.net/service.asmx?wsdl; lineNumber: 12; columnNumber: 43; (Relevant to above error) another "SearchFlights" is generated from here. .... org.xml.sax.SAXParseException; systemId: http://www5v80.elsyarres.net/service.asmx?wsdl; lineNumber: 371; columnNumber: 42; A class/interface with the same name "hello.wsdl.GetFlightDetails" is already in use. Use a class customization to resolve this conflict. .... 

Maven插件

   maven-war-plugin 2.4  WebContent    org.jvnet.jaxb2.maven2 maven-jaxb2-plugin 0.12.3    generate     WSDL hello.wsdl   http://www5v80.elsyarres.net/service.asmx?wsdl     

我将以下package-info.java文件添加到hello.wsdl包中,但它没有帮助。

 @XmlSchema( namespace = "ElsyArres.API", elementFormDefault = XmlNsForm.QUALIFIED) package hello.wsdl; import javax.xml.bind.annotation.XmlNsForm; import javax.xml.bind.annotation.XmlSchema; 

您面临的错误消息基本上表明wsdl的types部分中的某些名称是您使用过两次。 在您的情况下, 所有 标记都与其对应的类型(定义为 )具有相同的名称。

例:

                   

这种情况非常罕见。

解决这些问题基本上有两种选择:

使用autoNameResolution

   org.jvnet.jaxb2.maven2 maven-jaxb2-plugin 0.13.1    generate      -XautoNameResolution  WSDL hello.wsdl   http://www5v80.elsyarres.net/service.asmx?wsdl     

该插件将通过在每个冲突名称后附加数字来解决所有命名冲突。 在上面提到的SearchFlights案例中,这将导致生成SearchFlightsSearchFlights2

更好的方法是使用绑定文件提前解决所有名称冲突。 绑定文件主要包含XPATH表达式和转换规则。 附加到每个声明名称的绑定文件如下:

           

jaxb:nameXmlTransform还有其他选项jaxb:nameXmlTransform类似于后缀,并且前置于其他类型的xml元素(如类型)。

遗憾的是,我无法使用org.jvnet.jaxb2.maven2:maven-jaxb2-plugin来处理这个绑定文件(但我确信有一个工作配置)

它仍然适用于org.codehaus.mojo:jaxws-maven-plugin和以下配置。

  org.codehaus.mojo jaxws-maven-plugin 2.4.1    wsimport      ${basedir}/src/main/resources/bindings.xjb   http://www5v80.elsyarres.net/service.asmx?wsdl   -Djavax.xml.accessExternalSchema=all    

如果autoNameResolution修复

   -XautoNameResolution  

不起作用,尝试:

   -B-XautoNameResolution  

删除标记解决了我的问题。