I reproduced it.
Basically what happens is that the below TestCompositeObject gets represented by two schemas in the grammar section:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="unqualified">

<xs:complexType name="testCompositeObject">
  <xs:sequence>
     <xs:element name="id" type="xs:int"/>
<xs:element minOccurs="0" name="name" type="xs:string"/> </xs:sequence>
</xs:complexType>

</xs:schema>

<xs:schema attributeFormDefault="unqualified" elementFormDefault="unqualified"
targetNamespace="http://example.com/test";>

<xs:import/>

<xs:element name="test" type="testCompositeObject"/>
</xs:schema>


Both scheme representations are accepted before the compilation but the compiler is not 'willing' to resolve the references to types residing in the schema without a target namespace.

I've no idea at the moment how to deal with it.
Additionally adding @XmlType(name = "testType", namespace = "http://example.com/test";) fixes the multi-schema generation, which I guess is the case when JAXB classes have been generated from the existing schemas, but I guess it should be somehow possible either customize the schema generation in the WADLGenerator to get a single schema produced or tweak the schema compiler to process the above two schemas, something to figure out...

Sergey



On 10/05/12 23:34, Ted wrote:
I'd actually tried that when I added the namespace too, it didn't help so I
didn't mention it before. I just tried it again with similar results, the
parameter is still missing although the wadl is slightly different due to
the name now :

     @XmlRootElement(name = "TestCompositeObject", namespace = "
http://example.com/test";)
     public static class TestCompositeObject
     {
         public int id = 23;
         public String name = "asdf";
     }

wadl produces :

<resource path="/setTest3">
    <method name="PUT" id="setTest3">
       <request>
          <representation mediaType="application/xml"
element="prefix1:TestCompositeObject"/>
       </request>
       <response>
          <representation mediaType="application/xml"
element="prefix1:TestCompositeObject"/>
       </response>
    </method>
</resource>

The exception on wadl2java generation is still similar :

      [java] WADLToJava Error: java.lang.reflect.UndeclaredThrowableException
      [java]
      [java] org.apache.cxf.tools.common.ToolException:
java.lang.reflect.UndeclaredThrowableException
      [java]     at
org.apache.cxf.tools.wadlto.jaxrs.JAXRSContainer.execute(JAXRSContainer.java:82)
      [java]     at
org.apache.cxf.tools.common.toolspec.ToolRunner.runTool(ToolRunner.java:103)
      [java]     at
org.apache.cxf.tools.wadlto.WADLToJava.run(WADLToJava.java:65)
      [java]     at
org.apache.cxf.tools.wadlto.WADLToJava.run(WADLToJava.java:57)
      [java]     at
org.apache.cxf.tools.wadlto.WADLToJava.main(WADLToJava.java:99)
      [java] Caused by: java.lang.reflect.UndeclaredThrowableException
      [java]     at $Proxy9.bind(Unknown Source)
      [java]     at
org.apache.cxf.tools.wadlto.jaxrs.SourceGenerator.createCodeModel(SourceGenerator.java:1196)
      [java]     at
org.apache.cxf.tools.wadlto.jaxrs.SourceGenerator.generateSchemaCodeAndInfo(SourceGenerator.java:231)
      [java]     at
org.apache.cxf.tools.wadlto.jaxrs.SourceGenerator.generateSource(SourceGenerator.java:220)
      [java]     at
org.apache.cxf.tools.wadlto.jaxrs.JAXRSContainer.processWadl(JAXRSContainer.java:151)
      [java]     at
org.apache.cxf.tools.wadlto.jaxrs.JAXRSContainer.execute(JAXRSContainer.java:65)
      [java]     at
org.apache.cxf.tools.wadlto.jaxrs.JAXRSContainer.execute(JAXRSContainer.java:74)
      [java]     ... 4 more
      [java] Caused by: java.lang.reflect.InvocationTargetException
      [java]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
      [java]     at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      [java]     at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      [java]     at java.lang.reflect.Method.invoke(Method.java:597)
      [java]     at
org.apache.cxf.common.util.ReflectionInvokationHandler.invoke(ReflectionInvokationHandler.java:52)
      [java]     ... 11 more
      [java] Caused by: java.lang.reflect.UndeclaredThrowableException
      [java]     at $Proxy13.error(Unknown Source)
      [java]     at
com.sun.tools.xjc.api.impl.s2j.SchemaCompilerImpl.error(SchemaCompilerImpl.java:316)
      [java]     at
com.sun.tools.xjc.util.ErrorReceiverFilter.error(ErrorReceiverFilter.java:82)
      [java]     at
com.sun.xml.xsom.impl.parser.ParserContext$2.error(ParserContext.java:206)
      [java]     at
com.sun.xml.xsom.impl.parser.ParserContext$1.reportError(ParserContext.java:184)
      [java]     at
com.sun.xml.xsom.impl.parser.NGCCRuntimeEx.reportError(NGCCRuntimeEx.java:175)
      [java]     at
com.sun.xml.xsom.impl.parser.DelayedRef.resolve(DelayedRef.java:110)
      [java]     at
com.sun.xml.xsom.impl.parser.DelayedRef.run(DelayedRef.java:85)
      [java]     at
com.sun.xml.xsom.impl.parser.ParserContext.getResult(ParserContext.java:135)
      [java]     at
com.sun.xml.xsom.parser.XSOMParser.getResult(XSOMParser.java:211)
      [java]     at
com.sun.tools.xjc.ModelLoader.createXSOM(ModelLoader.java:532)
      [java]     at
com.sun.tools.xjc.api.impl.s2j.SchemaCompilerImpl.bind(SchemaCompilerImpl.java:268)
      [java]     ... 16 more
      [java] Caused by: java.lang.reflect.InvocationTargetException
      [java]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
      [java]     at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      [java]     at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      [java]     at java.lang.reflect.Method.invoke(Method.java:597)
      [java]     at
org.apache.cxf.common.util.ReflectionInvokationHandler.invoke(ReflectionInvokationHandler.java:52)
      [java]     ... 28 more
      [java] Caused by: java.lang.RuntimeException: Error compiling schema
from WADL : undefined simple or complex type 'testCompositeObject'
      [java]     at
org.apache.cxf.tools.wadlto.jaxrs.SourceGenerator$InnerErrorListener.error(SourceGenerator.java:1343)
      [java]     ... 33 more
      [java] Caused by: org.xml.sax.SAXParseException: undefined simple or
complex type 'testCompositeObject'
      [java]     at
com.sun.xml.xsom.impl.parser.ParserContext$1.reportError(ParserContext.java:180)
      [java]     ... 23 more


On Fri, May 11, 2012 at 7:38 AM, Sergey Beryozkin<[email protected]>wrote:

Well, it is the second time I'm seeing XmlRootElement with a namespace
attribute but without a name attribute, and in both cases the same issue of
the badly generated WADL has been discussed :-), so it is time to support
this variation too.

Yes, the JAXB Data Binding section does not show a namespace attribute in
action, it is not that important for that section, besides using this
attribute is not the only way to provide a namespace for JAXB.

I think an empty XMLRootElement works OK when ObjectFactory is also
available...
In meantime, add an explicit name attribute too

Cheers, Sergey



On 10/05/12 21:20, Ted wrote:

None of the examples I've seen have had to do that. Even the "basic"
sample
in cxf doesn't seem to do that. If I look at the sample
Customer/Order/Product classes none of them have an explicit namespace
declaration.

I gave it a try anyways :

     @XmlRootElement(namespace = "http://example.com/test";)
     public static class TestCompositeObject
     {
         public int id = 23;
         public String name = "asdf";
     }

I can see wadl has changed to have the namespace for the
TestCompositeObject entry. The method itself though has not changed :

<resource path="/setTest3">
    <method name="PUT" id="setTest3">
       <request>
          <representation mediaType="application/xml"/>
       </request>
       <response>
          <representation mediaType="application/xml"/>
       </response>
    </method>
</resource>

When I call wadl2java on it, I get an exception : (I'm using jdk
1.6.0_26-b03 on linux, and cxf 2.6.0)

      [java] WADLToJava Error: java.lang.reflect.**
UndeclaredThrowableException
      [java]
      [java] org.apache.cxf.tools.common.**ToolException:
java.lang.reflect.**UndeclaredThrowableException
      [java]     at
org.apache.cxf.tools.wadlto.**jaxrs.JAXRSContainer.execute(**
JAXRSContainer.java:82)
      [java]     at
org.apache.cxf.tools.common.**toolspec.ToolRunner.runTool(**
ToolRunner.java:103)
      [java]     at
org.apache.cxf.tools.wadlto.**WADLToJava.run(WADLToJava.**java:65)
      [java]     at
org.apache.cxf.tools.wadlto.**WADLToJava.run(WADLToJava.**java:57)
      [java]     at
org.apache.cxf.tools.wadlto.**WADLToJava.main(WADLToJava.**java:99)
      [java] Caused by: java.lang.reflect.**UndeclaredThrowableException
      [java]     at $Proxy9.bind(Unknown Source)
      [java]     at
org.apache.cxf.tools.wadlto.**jaxrs.SourceGenerator.**createCodeModel(**
SourceGenerator.java:1196)
      [java]     at
org.apache.cxf.tools.wadlto.**jaxrs.SourceGenerator.**
generateSchemaCodeAndInfo(**SourceGenerator.java:231)
      [java]     at
org.apache.cxf.tools.wadlto.**jaxrs.SourceGenerator.**generateSource(**
SourceGenerator.java:220)
      [java]     at
org.apache.cxf.tools.wadlto.**jaxrs.JAXRSContainer.**
processWadl(JAXRSContainer.**java:151)
      [java]     at
org.apache.cxf.tools.wadlto.**jaxrs.JAXRSContainer.execute(**
JAXRSContainer.java:65)
      [java]     at
org.apache.cxf.tools.wadlto.**jaxrs.JAXRSContainer.execute(**
JAXRSContainer.java:74)
      [java]     ... 4 more
      [java] Caused by: java.lang.reflect.**InvocationTargetException
      [java]     at sun.reflect.**NativeMethodAccessorImpl.**
invoke0(Native
Method)
      [java]     at
sun.reflect.**NativeMethodAccessorImpl.**invoke(**
NativeMethodAccessorImpl.java:**39)
      [java]     at
sun.reflect.**DelegatingMethodAccessorImpl.**invoke(**
DelegatingMethodAccessorImpl.**java:25)
      [java]     at java.lang.reflect.Method.**invoke(Method.java:597)
      [java]     at
org.apache.cxf.common.util.**ReflectionInvokationHandler.**invoke(**
ReflectionInvokationHandler.**java:52)
      [java]     ... 11 more
      [java] Caused by: java.lang.reflect.**UndeclaredThrowableException
      [java]     at $Proxy13.error(Unknown Source)
      [java]     at
com.sun.tools.xjc.api.impl.**s2j.SchemaCompilerImpl.error(**
SchemaCompilerImpl.java:316)
      [java]     at
com.sun.tools.xjc.util.**ErrorReceiverFilter.error(**
ErrorReceiverFilter.java:82)
      [java]     at
com.sun.xml.xsom.impl.parser.**ParserContext$2.error(**
ParserContext.java:206)
      [java]     at
com.sun.xml.xsom.impl.parser.**ParserContext$1.reportError(**
ParserContext.java:184)
      [java]     at
com.sun.xml.xsom.impl.parser.**NGCCRuntimeEx.reportError(**
NGCCRuntimeEx.java:175)
      [java]     at
com.sun.xml.xsom.impl.parser.**DelayedRef.resolve(DelayedRef.**java:110)
      [java]     at
com.sun.xml.xsom.impl.parser.**DelayedRef.run(DelayedRef.**java:85)
      [java]     at co
      [java]
m.sun.xml.xsom.impl.parser.**ParserContext.getResult(**
ParserContext.java:135)
      [java]     at
com.sun.xml.xsom.parser.**XSOMParser.getResult(**XSOMParser.java:211)
      [java]     at
com.sun.tools.xjc.ModelLoader.**createXSOM(ModelLoader.java:**532)
      [java]     at
com.sun.tools.xjc.api.impl.**s2j.SchemaCompilerImpl.bind(**
SchemaCompilerImpl.java:268)
      [java]     ... 16 more
      [java] Caused by: java.lang.reflect.**InvocationTargetException
      [java]     at sun.reflect.**NativeMethodAccessorImpl.**
invoke0(Native
Method)
      [java]     at
sun.reflect.**NativeMethodAccessorImpl.**invoke(**
NativeMethodAccessorImpl.java:**39)
      [java]     at
sun.reflect.**DelegatingMethodAccessorImpl.**invoke(**
DelegatingMethodAccessorImpl.**java:25)
      [java]     at java.lang.reflect.Method.**invoke(Method.java:597)
      [java]     at
org.apache.cxf.common.util.**ReflectionInvokationHandler.**invoke(**
ReflectionInvokationHandler.**java:52)
      [java]     ... 28 more
      [java] Caused by: java.lang.RuntimeException: Error compiling schema
from WADL : undefined simple or complex type 'testCompositeObject'
      [java]     at
org.apache.cxf.tools.wadlto.**jaxrs.SourceGenerator$**
InnerErrorListener.error(**SourceGenerator.java:1343)
      [java]     ... 33 more
      [java] Caused by: org.xml.sax.SAXParseException: undefined simple or
complex type 'testCompositeObject'
      [java]     at
com.sun.xml.xsom.impl.parser.**ParserContext$1.reportError(**
ParserContext.java:180)
      [java]     ... 23 more


I should add though, if I just get the object like :

     @GET
     @Path("setTest2")
     @Produces("application/xml")
     public TestCompositeObject getTest2()
     {
         return(new TestCompositeObject());
     }

It does return XML as a string like I expect it to.



On Thu, May 10, 2012 at 7:15 PM, Sergey Beryozkin<[email protected]**
wrote:

  Hi

On 10/05/12 04:37, Ted wrote:

  thanks for the answer to my previous method Id problem, adding
addResourceAndMethodIds worked great.

I have a new problem now, I'm trying to use the JAXB to automatically
convert parameters and response types to and from java/xml. The method
parameter seems to be dissappearing, or I'm missing an annotation or
something. All the examples I've seen and documentation seems to show
that
it should work...

My service has the following :

     @XmlRootElement
     public static class TestCompositeObject
     {
         public int id = 23;
         public String name = "asdf";
     }

     @PUT
     @Path("setTest3")
     @Produces("application/xml")
     @Consumes("application/xml")
     public TestCompositeObject setTest3(TestCompositeObject transfer)
     {
         logger.info(transfer);
         return(transfer);
     }

The wadl generated looks a little off, it's missing the params :

             <resource path="/setTest3">
                 <method name="PUT" id="setTest3">
                     <request>
                         <representation mediaType="application/xml" />
                     </request>
                     <response>
                         <representation mediaType="application/xml" />
                     </response>
                 </method>
             </resource>

As a result when I generate the stubs from the wadl, it comes out not
quite
right :

     @PUT
     @Consumes("application/xml")
     @Produces("application/xml")
     @Path("/setTest3")
     Response setTest3();

There's no method parameter, and I'm not quite sure if Response should
be
the return type of if it should have been mapped back to
TestCompositeObject.

I can't seem to find any documentation on any annotations or any
configuration to sort this out.


  The explanation is that TestCompositeObject has no any namespace bound
to
it, please add a namespace attribute to XMlRootElement and you should get
the grammar and links properly generated

HTH
Sergey


  Anyone have any ideas?




--
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com






--
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com






--
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com

Reply via email to