簡體   English   中英

由於“[..]ToStringStrategy 無法轉換為 [..]ToStringStrategy2”,JAXB2 無法為 XSD 生成類

[英]JAXB2 cannot generate classes for XSD due to '[..]ToStringStrategy cannot be converted to [..]ToStringStrategy2'

我在 0.12.0 版本的 org.jvnet.jaxb2_commons.jaxb2-basics 中使用 maven-jaxb2-plugin 時發現了 toString 生成問題。 它沒有生成 JAXBToStringStrategy.INSTANCE2,而是使用與 ToStringStrategy2 不兼容的 INSTANCE,如下所示:

public String toString() {
    final ToStringStrategy2 strategy = JAXBToStringStrategy.INSTANCE;
    final StringBuilder buffer = new StringBuilder();
    append(null, buffer, strategy);
    return buffer.toString();
}

因此,maven 構建在編譯時失敗,示例錯誤如下:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project test: Compilation failure
[ERROR] /D:/test/jaxb2/target/generated-sources/xjc/xsd/file/File.java:[73,64] incompatible types: org.jvnet.jaxb2_commons.lang.ToStringStrategy cannot be converted to org.jvnet.jaxb2_commons.lang.ToStringStrategy2

出於某種原因,當我使用與 org.jvnet.jax-ws-commons.jaxws-maven-plugin 相同的配置從 WSDL 生成類時,使用了正確的 INSTANCE2。 我還嘗試通過以下方式明確給出要使用的類:

-XtoString-toStringBuilder=org.jvnet.jaxb2_commons.lang.JAXBToStringStrategy

或者

-XtoString-toStringStrategyClass=org.jvnet.jaxb2_commons.lang.JAXBToStringStrategy

但什么都沒有改變。 有人有類似的問題嗎? 下面的例子:

pom.xml

<dependencies>
    <dependency>
        <groupId>org.jvnet.jaxb2_commons</groupId>
        <artifactId>jaxb2-basics-runtime</artifactId>
        <version>0.12.0</version>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.jvnet.jaxb2.maven2</groupId>
            <artifactId>maven-jaxb2-plugin</artifactId>
            <version>0.14.0</version>
            <executions>
                <execution>
                    <id>generate-raml</id>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                    <configuration>
                        <schemaDirectory>./</schemaDirectory>
                        <extension>true</extension>
                        <args>
                            <arg>-XtoString</arg>
                        </args>
                    </configuration>
                </execution>
            </executions>
            <dependencies>
                <dependency>
                    <groupId>org.jvnet.jaxb2_commons</groupId>
                    <artifactId>jaxb2-basics</artifactId>
                    <version>0.12.0</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

XSD [應該放在 pom 旁邊]:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:file="file.xsd"
  targetNamespace="file.xsd"
    elementFormDefault="qualified">
  <xsd:element name="file">
    <xsd:complexType>
      <xsd:attribute name="id" type="xsd:string" use="optional"/>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

嘗試對 jaxb2-basics 和 jaxb2-basics-runtime 使用版本“1.11.1”而不是“0.12.0”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM