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

丹尼尔·纽敦(Daniel Newtown):

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

我了解它无法生成带有名称的文件,但是我不确定如何解决该问题。到目前为止,我访问了以下链接。123

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插件

    <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.4</version>
        <configuration>
            <warSourceDirectory>WebContent</warSourceDirectory>
        </configuration>
    </plugin>
    <plugin>
        <groupId>org.jvnet.jaxb2.maven2</groupId>
        <artifactId>maven-jaxb2-plugin</artifactId>
        <version>0.12.3</version>
        <executions>
            <execution>
                <goals>
                    <goal>generate</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <schemaLanguage>WSDL</schemaLanguage>
            <generatePackage>hello.wsdl</generatePackage>
            <schemas>
                <schema>
                    <url>http://www5v80.elsyarres.net/service.asmx?wsdl</url>
                </schema>
            </schemas>
        </configuration>
    </plugin>

我将以下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;
贾:

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

例:

  <s:element name="SearchFlights">
    <s:complexType>
      <s:sequence>
        <s:element minOccurs="0" maxOccurs="1" name="SoapMessage" type="tns:SearchFlights" />
      </s:sequence>
    </s:complexType>
  </s:element>

  <s:complexType name="SearchFlights">
    <s:complexContent mixed="false">
      <s:extension base="tns:SoapMessageBase">
        <s:sequence>
          <s:element minOccurs="0" maxOccurs="1" name="Request" type="tns:SearchFlightsRequest" />
          <s:element minOccurs="0" maxOccurs="1" name="Response" type="tns:SearchFlightsResponse" />
        </s:sequence>
      </s:extension>
    </s:complexContent>
  </s:complexType>

这是很不常见的。

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

使用autoNameResolution

 <plugin>
     <groupId>org.jvnet.jaxb2.maven2</groupId>
     <artifactId>maven-jaxb2-plugin</artifactId>
     <version>0.13.1</version>
     <executions>
         <execution>
             <goals>
                 <goal>generate</goal>
             </goals>
         </execution>
     </executions>
     <configuration>

         <args>
             <arg>-XautoNameResolution</arg>
         </args>

         <schemaLanguage>WSDL</schemaLanguage>
         <generatePackage>hello.wsdl</generatePackage>
         <schemas>
             <schema>
                 <url>http://www5v80.elsyarres.net/service.asmx?wsdl</url>
             </schema>
          </schemas>
      </configuration>
  </plugin>

该插件将通过在每个冲突名称后附加数字来解决所有命名冲突。在上述SearchFlights情况下,这将导致生成SearchFlightsSearchFlights2

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

<?xml version="1.0" encoding="UTF-8"?>
<jaxws:bindings wsdlLocation="http://www5v80.elsyarres.net/service.asmx?wsdl"
            xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
            xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
            xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" version="2.1"
            xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <jaxws:bindings node="wsdl:definitions/wsdl:types/xs:schema[@targetNamespace='ElsyArres.API']">
        <jaxb:schemaBindings>
            <jaxb:nameXmlTransform>
                <jaxb:elementName suffix="Elem"/>
            </jaxb:nameXmlTransform>
        </jaxb:schemaBindings>
    </jaxws:bindings>
</jaxws:bindings>

对于jaxb:nameXmlTransform后缀和其他类型的xml元素(如类型),还有其他选项

可悲的是,我无法使用org.jvnet.jaxb2.maven2:maven-jaxb2-plugin(但我确定有一个有效的配置)来使用此绑定文件。

尽管如此,它仍可用于org.codehaus.mojo:jaxws-maven-plugin和以下配置。

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>jaxws-maven-plugin</artifactId>
    <version>2.4.1</version>
    <executions>
        <execution>
            <goals>
                <goal>wsimport</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <bindingFiles>
         <bindingFile>${basedir}/src/main/resources/bindings.xjb</bindingFile>
        </bindingFiles>
        <wsdlUrls>
            <wsdlUrl>http://www5v80.elsyarres.net/service.asmx?wsdl</wsdlUrl>
        </wsdlUrls>
        <vmArgs>
            <vmArg>-Djavax.xml.accessExternalSchema=all</vmArg>
        </vmArgs>
    </configuration>
</plugin>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用自定义 IEnumerator 类生成协程

如何生成自定义 JSESSIONID 以避免冲突

通过自定义解决JAXB“ ObjectFactory类中的名称冲突”问题

如何使用 SASS 为引导类生成自定义宽度

如何通过kotlinpoet使用自定义界面生成类

Git合并冲突自定义自动解决方案

自定义包提供程序以解决名称空间冲突

如何生成自定义 .otf 字体子集文件?

如何自定义 Vue CLI 生成的 JS 文件的名称?

如何使用Pandas从CSV文件夹生成自定义主数据框?

如何在Android Studio中使用自定义名称生成输出APK文件?

如何从自定义类文件中将UISlider移至位置

如何在Nestjs中使用自定义类文件维护Nestjs的规则

Laravel中的自定义类在子文件夹中时如何使用?

使用python / java生成自定义xml文件

使用用户输入生成自定义json文件

动态生成自定义类

如何使用 Mockito 使用自定义注释模拟类?

如何使自定义类动态使用我的自定义字体?

如何使用自定义init创建自定义UINavigationController类?

如何在Kotlin中使用自定义字体创建TextView的自定义类?

PyQt:如何使用自定义消息生成光栅图像

如何使用WP生成自定义滑块?

如何使用rebot命令生成自定义日志?

如何使用Gremlin在OrientDB中创建自定义类

如何使用List.Distinct填充自定义类?

如何在Silex的自定义类中使用$ app?

如何使用GraphQL自定义身份验证类?

如何在TreeSet中使用自定义类?