我正在尝试使用Maven生成Spring框架要使用的JAXB文件,但是Maven显示以下错误:
我了解它无法生成带有名称的文件,但是我不确定如何解决该问题。
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 情况下,这将导致 生成 SearchFlights 和_SearchFlights2_ 。
更好的方法 是使用绑定文件提前解决所有名称冲突。绑定文件主要包含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>
我希望向sbt添加一个自定义源生成器,并将其与scalapb(Scala协议缓冲区生成器)一起使用。每一个都独立工作。然而,当两者结合在一起时,项目在清理后第一次编译失败。如果我再次运行compile,它就会成功。 错误消息: 要再现此错误,您需要在src/main/protobuf中至少有一个proto文件。 我的自定义任务和scalapb这两个源生成器会发生冲突,这让我感到困惑。它们不应该都写
我正在使用Swashback为ASP生成swagger文档。NET核心API我正在写。在我的API中,我使用了许多自定义Json转换器,因此我接收和返回的Json看起来与C类的定义不完全一样。例如,我可能有这样一个类: 它将被序列化为 然而,Swashuckle将其记录为 我如何告诉Swashback我的模型是如何序列化和反序列化的?
我正在尝试rollup js来构建我的typescript项目,但我不知道如何生成定义文件,以及如何将它们自动包含在dist文件中。 有人知道怎么做吗? 这是我的汇总表。配置。js 我使用的是默认的ts配置,但对于declaration=true也是如此。 编辑: 还尝试使用Webpack: Tsconfig: 生成d.ts如下所示: 但是在我使用该包的应用程序中,它找不到生成器... 生成器未定
在我们的项目中,我们正试图从Spring标准AOP转移到AspectJ,正如在许多类似的地方所解释的那样(我们需要使事务处理成为一些私有和受保护的方法)。 我们已经能够使用标准的Spring注释(如)来很好地完成这项工作。但是我们面临的问题是,在我们的项目中,有一些自定义注释(不是自定义方面)是AeyJ无法识别的。例如,我们有一个注释“扩展”(仅修改属性): 你知道如何告诉AspectJ也给wea
问题内容: 实施自己的最佳方法是哪一种? 其实我得到一个问题登记。如果我在中使用自定义类,则管理页面上不会显示任何应用程序。 我用一个小技巧解决了这个问题。我写了这个课: 并像这样实现我的自定义AdminSite: 所以,我可以用这个为。 有人知道更好的方法吗?由于我以下划线开头访问var,所以它不过是hack。我不喜欢黑客。 编辑:另一种方法是重写函数,但是在这种情况下,我将有冗余代码。 问题答
问题内容: 我正在使用JAXB和xjc将XML Schema编译为Java类。我不想手动编辑此生成的类。我有这样的xml模式: xjc生成仅包含对象列表的类。是否有机会省略该类并直接在该类中具有对象列表? 我知道可以通过注释来完成,但是我不知道如何告诉xjc创建此类注释。 感谢您的任何建议! 最好的问候,马库斯 问题答案: Bjarne Hansen为xjc开发了一个插件,可以解决此问题。不幸的是