You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by Benson Margulies <bi...@gmail.com> on 2009/07/15 16:22:14 UTC

XML Nodes and JAX-WS / JAX-B

In my ongoing saga of explaining the Java web service world to an
involuntary convert from Microsoft, I find myself faced with another
question.

In Aegis, you can just use org.w3c.dom.Document as a method return
type or parameter or property, and good things happen. (Well, one
slightly odd things happens on the client side, but let's not get
bogged down.)

The appearance to my bit of googling is that the JAX-WS+JAX-B
equivalent of this is, at best, a mess. If I take a WSDL from Aegis or
.net and do wsdl2java, I get return type of Object on the WebMethod,
plus a class with a vector of Objects in it, and perhaps an actual DOM
node hiding in there.

What appears to be a very simple thing -- have a DOM object as a
parameter or return value of a Java-first service -- seems to be not
there.

I'm hoping that I'm missing something here.

Re: XML Nodes and JAX-WS / JAX-B

Posted by Daniel Kulp <dk...@apache.org>.
Benson,

With JAXB, the default thinking is that if you are running xjc (wsdl2java 
calls it), you REALLY want the JAXB generated objects whenever possible.   
Thus, it maps to List<Object>.   If the incoming XML element maps to something 
that JAXB has a mapping to, it will deserialize to the JAXB type and return 
that.   If it DOESN'T have a mapping, you get the dom.

There is a JAXB customization that will force it into Element.   From section 
7.12.3 of the JAXB spec:

<xs:complexType name=”foo”>
    <xs:sequence>
        <xs:any maxOccurs="unbounded" processContents="lax">
            <xs:annotation><xs:appinfo>
                    <jaxb:dom/>
            </xs:appinfo></xs:annotation>
        </xs:any>
     </xs:sequence>
</xs:complexType>

turns into:
import org.w3c.dom.Element;
public class Foo {
    @XmlAnyElement(lax=”false”)
    List<Element> getContent(){...}
}


Dan




On Wed July 15 2009 10:22:14 am Benson Margulies wrote:
> In my ongoing saga of explaining the Java web service world to an
> involuntary convert from Microsoft, I find myself faced with another
> question.
>
> In Aegis, you can just use org.w3c.dom.Document as a method return
> type or parameter or property, and good things happen. (Well, one
> slightly odd things happens on the client side, but let's not get
> bogged down.)
>
> The appearance to my bit of googling is that the JAX-WS+JAX-B
> equivalent of this is, at best, a mess. If I take a WSDL from Aegis or
> .net and do wsdl2java, I get return type of Object on the WebMethod,
> plus a class with a vector of Objects in it, and perhaps an actual DOM
> node hiding in there.
>
> What appears to be a very simple thing -- have a DOM object as a
> parameter or return value of a Java-first service -- seems to be not
> there.
>
> I'm hoping that I'm missing something here.

-- 
Daniel Kulp
dkulp@apache.org
http://www.dankulp.com/blog