Hi,
This is a known issue.
Since CXF 2.3 by default wsdl2java will generate jaxws 2.2 spec code
which need use jaxb 2.2,
java.xml.bind.annotation.XmlElementRef.required() is from jaxb2.2 api,
however java6 build-in jaxws 2.1 api which cause such error.
You have several options to resolve it
1. endorsed jaxws2.2 and jaxb2.2 api in your jdk, take a look at [1]
to get more details
2. as you're using cxf 2.3.9, you can use a new flag for wsdl2java
tool introuducd from cxf 2.3.3
wsdl2java -frontend jaxws21
to generate code which is jaxws2.1 api compatible.
3. use jdk5 instead
I personally prefer option 1, If you use wsdl2java script shipped with
kit or maven cxf codegen plugin, it's already setup for you.
[1]http://cxf.apache.org/docs/23-migration-guide.html
Freeman
On 2012-4-17, at 下午8:41, harihara.muvvala wrote:
/*Hi,
We have gone through multiple posts in forum. These posts are
referring to
different versions. We are using cxf 2.3.2 and jaxb 2.2.1.
We are creating java files from wsdl. Result required binding as XML
has
recurrence nodes.
Here is binding info:*/
-------------------------------------
- <jaxb:bindings xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" version="2.1">
- <jaxb:bindings schemaLocation="Result.xsd">
- <jaxb:bindings
node="/xsd:schema/xsd:complexType[@name='interactionDrugType']/
xsd:sequence/xsd:element[@name='Allergy']/xsd:complexType/xsd:choice/
xsd:element[@name='SubstanceClass']/xsd:complexType/xsd:sequence/
xsd:element[@name='CrossSensitive']/xsd:complexType/xsd:sequence/
xsd:element[@name='SubstanceClass']/xsd:complexType">
<jaxb:class name="SubstanceClassAllergy" />
</jaxb:bindings>
- <jaxb:bindings
node="/xsd:schema/xsd:complexType[@name='interactionDrugType']/
xsd:sequence/xsd:element[@name='Allergy']/xsd:complexType/xsd:choice/
xsd:element[@name='Molecule']/xsd:complexType/xsd:choice/
xsd:element[@name='SubstanceClass']/xsd:complexType/xsd:sequence/
xsd:element[@name='CrossSensitive']/xsd:complexType/xsd:sequence/
xsd:element[@name='SubstanceClass']/xsd:complexType">
<jaxb:class name="SubstanceClassAllergyMolecule" />
</jaxb:bindings>
- <jaxb:bindings
node="/xsd:schema/xsd:complexType[@name='interactionDrugType']/
xsd:sequence/xsd:element[@name='Allergy']/xsd:complexType/xsd:choice/
xsd:element[@name='Molecule']/xsd:complexType/xsd:choice/
xsd:element[@name='SubstanceClass']/xsd:complexType/xsd:sequence/
xsd:element[@name='CrossSensitive']/xsd:complexType/xsd:sequence/
xsd:element[@name='SubstanceClass']/xsd:complexType/xsd:choice/
xsd:element[@name='Molecule']/xsd:complexType">
<jaxb:class name="SubstanceClassAllergyMoleculeSubMolecule" />
</jaxb:bindings>
</jaxb:bindings>
</jaxb:bindings>
------------------------------------------------
/*
we are getting following errors: If we remove recurring elements, we
are
able to generate.*/
--------------------------------------------------------------------
[java] WSDLToJava Error:
java.lang.reflect.UndeclaredThrowableException
[java]
[java] org.apache.cxf.tools.common.ToolException:
java.lang.reflect.UndeclaredThrowableException
[java] at
org
.apache
.cxf
.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:
288)
[java] at
org
.apache.cxf.tools.common.toolspec.ToolRunner.runTool(ToolRunner.java:
103)
[java] at
org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:113)
[java] at
org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:86)
[java] at
org.apache.cxf.tools.wsdlto.WSDLToJava.main(WSDLToJava.java:184)
[java] Caused by: java.lang.reflect.UndeclaredThrowableException
[java] at $Proxy46.required(Unknown Source)
[java] at
com
.sun
.tools
.xjc
.generator
.bean.field.AbstractField.annotateReference(AbstractField.java:197)
[java] at
com
.sun
.tools
.xjc.generator.bean.field.AbstractField.annotate(AbstractField.java:
156)
[java] at
com
.sun
.tools
.xjc
.generator
.bean.field.AbstractListField.generate(AbstractListField.java:124)
[java] at
com
.sun
.tools
.xjc
.generator.bean.field.UntypedListField.<init>(UntypedListField.java:
107)
[java] at
com
.sun
.tools
.xjc
.generator
.bean
.field
.UntypedListFieldRenderer.generate(UntypedListFieldRenderer.java:72)
[java] at
com
.sun
.tools
.xjc
.generator
.bean.field.DefaultFieldRenderer.generate(DefaultFieldRenderer.java:
79)
[java] at
com
.sun
.tools
.xjc
.generator.bean.BeanGenerator.generateFieldDecl(BeanGenerator.java:
759)
[java] at
com
.sun
.tools
.xjc
.generator.bean.BeanGenerator.generateClassBody(BeanGenerator.java:
540)
[java] at
com
.sun
.tools.xjc.generator.bean.BeanGenerator.<init>(BeanGenerator.java:243)
[java] at
com
.sun
.tools.xjc.generator.bean.BeanGenerator.generate(BeanGenerator.java:
161)
[java] at
com.sun.tools.xjc.model.Model.generateCode(Model.java:286)
[java] at
com
.sun
.tools
.xjc.api.impl.s2j.SchemaCompilerImpl.bind(SchemaCompilerImpl.java:252)
[java] at
com
.sun
.tools
.xjc.api.impl.s2j.SchemaCompilerImpl.bind(SchemaCompilerImpl.java:85)
[java] at
org
.apache
.cxf
.tools
.wsdlto
.databinding.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:392)
[java] at
org
.apache
.cxf
.tools
.wsdlto.WSDLToJavaContainer.generateTypes(WSDLToJavaContainer.java:
582)
[java] at
org
.apache
.cxf
.tools
.wsdlto.WSDLToJavaContainer.processWsdl(WSDLToJavaContainer.java:237)
[java] at
org
.apache
.cxf
.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:
137)
[java] at
org
.apache
.cxf
.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:
280)
[java] ... 4 more
[java] Caused by: java.lang.NoSuchMethodException:
javax.xml.bind.annotation.XmlElementRef.required()
[java] at java.lang.Class.getDeclaredMethod(Class.java:
1937)
[java] at
com
.sun
.codemodel.TypedAnnotationWriter.invoke(TypedAnnotationWriter.java:
108)
[java] ... 23 more
-----------------------------------------------------------------------------------------
/*Here is wsdlToJava args:*/
-------------------------------------------------------------------------------
<java classname="org.apache.cxf.tools.wsdlto.WSDLToJava" fork="true">
<arg value="-client"/>
<arg value="-validate" />
<arg value="-verbose"/>
<arg value="-d"/>
<arg value="@{src.dir}" />
<arg value="@{wsdl.dir}/@{wsdl.file}"/>
<classpath>
<fileset dir="..//lib">
<include name="**/*.jar" />
</fileset>
</classpath>
</java>
</do>
</bi:for.java.project>
-------------------------------------------------------------------------------
/
*We are using following jar versions in lib folder:*/
---------------------------------------------------
<classpathentry kind="lib" path="lib/cxf-2.3.2.jar"/>
<classpathentry kind="lib" path="lib/cxf-xjc-boolean-2.3.2.jar"/>
<classpathentry kind="lib" path="lib/cxf-xjc-bug671-2.3.2.jar"/>
<classpathentry kind="lib" path="lib/cxf-xjc-dv-2.3.2.jar"/>
<classpathentry kind="lib" path="lib/cxf-xjc-ts-2.3.2.jar"/>
<classpathentry kind="lib" path="lib/jaxb-api-2.2.1.jar"/>
<classpathentry kind="lib" path="lib/jaxb-impl-2.2.1.1.jar"/>
<classpathentry kind="lib" path="lib/jaxb-xjc-2.2.1.1.jar"/>
---------------------------------------------------
/
*Please help us here.
Thanks
Hari Hara*/
--
View this message in context:
http://cxf.547215.n5.nabble.com/wsdl2java-tp5646464p5646464.html
Sent from the cxf-user mailing list archive at Nabble.com.
---------------------------------------------
Freeman Fang
FuseSource
Email:[email protected]
Web: fusesource.com
Twitter: freemanfang
Blog: http://freemanfang.blogspot.com
http://blog.sina.com.cn/u/1473905042
weibo: http://weibo.com/u/1473905042