我使用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>
答案 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.jarjaxb-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