JAXB混合版本?未定义的'必需'属性

时间:2014-06-13 09:18:38

标签: java jaxb jax-ws mule java-7

我使用wsimport maven插件生成一些来自WSDL文件的类@ Mule Anypoint Studio 3.5 with JDK 1.7_55

我使用jaxb 2.2.7并从mule libs中删除2.1.9版本并替换为2.2.7。

当我编译时,sometines工作正常,但其他人我多次犯这个错误:

The attribute required is undefined for the annotation type XmlElementRef   

我尝试在JDK中创建一个支持的文件夹,并包含.jars,

您知道如何避免此错误或正确替换此库吗?

我在pom.xml中包含了这个依赖项

<dependency>
        <groupId>com.sun.xml.ws</groupId>
        <artifactId>jaxws-tools</artifactId>
        <version>2.2.7</version>
    </dependency>

    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-impl</artifactId>
        <version>2.2.7</version>
    </dependency>
    <!-- xjc -->
    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-xjc</artifactId>
        <version>2.2.7</version>
    </dependency>
    <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>2.2.7</version>
    </dependency>
    <dependency>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>idlj-maven-plugin</artifactId>
        <version>1.2.1</version>
    </dependency>       

wsimport是2.2.7到

wsimport设置:

<plugin>
            <groupId>org.jvnet.jax-ws-commons</groupId>
            <artifactId>jaxws-maven-plugin</artifactId>
            <version>2.2.1</version>
            <executions>
                <execution>
                    <id>wsdl-AMANSequenceService-exec</id>
                    <goals>
                        <goal>wsimport</goal>
                    </goals>
                    <configuration>
                        <args>
                            <arg>-version</arg>
                            <arg>-B-nv</arg>
                            <arg>-Xdebug</arg>
                            <arg>-B-XautoNameResolution</arg>
                            <arg>-Xendorsed</arg>
                        </args>
                        <extension>true</extension>
                        <sourceDestDir>${basedir}/src/main/java</sourceDestDir>
                        <destDir>${basedir}/src/main/java</destDir>
                        <extension>true</extension>
                        <wsdlDirectory>${basedir}/src/main/resources/SICG/AMANSequenceService</wsdlDirectory>
                        <wsdlFiles>
                            <wsdlFile>AMANSequenceService.wsdl</wsdlFile>
                        </wsdlFiles>
                        <bindingFiles>
                            <bindingFile>${basedir}/src/main/resources/SICG/external/binding.xjb</bindingFile>
                        </bindingFiles>
                    </configuration>
                </execution>

4 个答案:

答案 0 :(得分:4)

我们可以通过替换 Mule CE运行时文件夹中的以下jar来修复上述行为(C:\ AnypointStudio \ plugins \ org.mule.tooling.server.3.5.0_3.5.0.201405141856 \骡\ lib中\优化):

jaxb-api-2.1 jaxb-api-2.2.jar

使用 jaxb-impl-2.2.7.jar

jaxb-impl-2.1.9 使用 jaxb-xjc-2.2.7.jar

jaxb-xjc-2.1.9

如果Mule开发人员将这些软件包更新到最新的发行版,那将非常有用。

答案 1 :(得分:2)

您认可的罐子的位置不正确。它应该是:

  

%JAVA_HOME%\ JRE \ lib中\赞同

在你的情况下是:

  

C:\爪哇\ jdk1.7.0_55 \ JRE \ lib中\赞同

将jaxb罐子放在这里,移除所有其他罐子并重新尝试。

答案 2 :(得分:1)

在Mule特定情况下,如果您遇到JAXB2.1,可以强制Apache CXF WSDL2Java生成符合JAXB2.1的客户端代码

<plugin>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-codegen-plugin</artifactId>
                <version>3.1.6</version>
                <executions>
                    <execution>
                        <id>generate-sources-file1</id>
                        <phase>generate-sources</phase>
                        <configuration>
                        <defaultOptions>
                            <frontEnd>jaxws21</frontEnd>
                        </defaultOptions>
                            <sourceRoot>${project.build.directory}/generated/service-file1</sourceRoot>
                            <wsdlOptions>
                                <wsdlOption>
                                    <wsdl>${basedir}/src/main/resources/some.wsdl</wsdl>
                                    <wsdlLocation>classpath:some.wsdl</wsdlLocation>
                                    <extraargs>
                                        <extraarg>-client</extraarg>
                                        <extraarg>-verbose</extraarg>
                                    </extraargs>
                                </wsdlOption>
                            </wsdlOptions>

                        </configuration>
                        <goals>
                            <goal>wsdl2java</goal>
                        </goals>
                    </execution>
                </executions>
                </plugin>

关键部分是

<defaultOptions>
  <frontEnd>jaxws21</frontEnd>
</defaultOptions>

答案 3 :(得分:0)

这适用于从搜索引擎中找到此旧帖子的人。

我在Eclipse中创建的新项目中收到了相同的错误消息。解决方案是:

1.) create a new JAXB project instead of some other project type,  
2.) specify JDK7,  
3.) Specify version 2.2 of JAXB