You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by Jeremy Robertson <je...@ldschurch.org> on 2011/11/08 22:19:45 UTC

CXF/JAXB Code-first service: modify XMLSchemaType of inputs

I am working on a CXF/JAXB code-first web service. I would like to be able to modify the WSDL definitions of some of the inputs.

For example, given the following interface snippet:

    @WebMethod
    public void Something(@WebParam(name="date") Date date);

The WSDL will generate the XMLSchema for the input "date" to be a "datetime" xml element. I would like it to be simply a "date" element instead.

It would also be nice to be able to specify the some of the other input attributes, such as minOccurs, etc.

For a custom object, the sub-elements can define all of these things through annotations such as XmlElement and XmlSchemaType. However, these annotations are not legal on an input parameter.

I know earlier versions of CXF did not handle this, but I'm not sure about the later versions. I'm currently running CXF 2.3.5.


 NOTICE: This email message is for the sole use of the intended recipient(s) and may contain confidential and privileged information. Any unauthorized review, use, disclosure or distribution is prohibited. If you are not the intended recipient, please contact the sender by reply email and destroy all copies of the original message.



Re: CXF/JAXB Code-first service: modify XMLSchemaType of inputs

Posted by Daniel Kulp <dk...@apache.org>.
On Tuesday, November 29, 2011 3:38:19 PM Jeremy Robertson wrote:
> I endorsed jaxb-api (version 2.2.1), and it did allow me to put XmlElement
> on an input, but it wouldn't allow the XmlSchemaType element--do you know
> if that is in a later patch version of 2.2?

Apparently not.  :-(   I thought they had updated all the annotations to allow 
them to be on a parameter.   Apparently they didn't.    I guess the other 
options are the only options for this now.  :-(

Dan

> 
> 
> Thanks,
> Jeremy Robertson
> 
> -----Original Message-----
> From: Daniel Kulp [mailto:dkulp@apache.org]
> Sent: Wednesday, November 09, 2011 10:53 AM
> To: users@cxf.apache.org
> Cc: Jeremy Robertson
> Subject: Re: CXF/JAXB Code-first service: modify XMLSchemaType of inputs
> 
> On Tuesday, November 08, 2011 9:19:45 PM Jeremy Robertson wrote:
> > I am working on a CXF/JAXB code-first web service. I would like to be
> > able to modify the WSDL definitions of some of the inputs.
> > 
> > For example, given the following interface snippet:
> >     @WebMethod
> >     public void Something(@WebParam(name="date") Date date);
> > 
> > The WSDL will generate the XMLSchema for the input "date" to be a
> > "datetime" xml element. I would like it to be simply a "date" element
> > instead.
> > 
> > It would also be nice to be able to specify the some of the other input
> > attributes, such as minOccurs, etc.
> > 
> > For a custom object, the sub-elements can define all of these things
> > through annotations such as XmlElement and XmlSchemaType. However,
> > these annotations are not legal on an input parameter.
> > 
> > I know earlier versions of CXF did not handle this, but I'm not sure
> > about the later versions. I'm currently running CXF 2.3.5.
> 
> There are three ways to handle this:
> 
> 1) Endorse the JAXB 2.2 API jar via one of the JDK endorsement mechanisms.
> Then the XmlElement and XmlSchemaType annotations can be used on the
> parameter.
> 
> 2) Create the wrapper type beans (you can use java2ws -warpperBeans as a
> starting point) and add the @RequestWrapper/@ResponseWrapper annotations to
> the method to point at them.   You can finely control the appearance of the
> wrapper schema via annotations in the beans.
> 
> 3) You CAN configure extra subclasses of AbstractServiceConfiguration into
> the factories where you override some of the methods to set various
> minOccurs/maxOccurs/etc.. type things.   VERY fine level of control, but
> very complex to do.
-- 
Daniel Kulp
dkulp@apache.org - http://dankulp.com/blog
Talend Community Coder - http://coders.talend.com

RE: CXF/JAXB Code-first service: modify XMLSchemaType of inputs

Posted by Jeremy Robertson <je...@ldschurch.org>.
I endorsed jaxb-api (version 2.2.1), and it did allow me to put XmlElement on an input, but it wouldn't allow the XmlSchemaType element--do you know if that is in a later patch version of 2.2?


Thanks,
Jeremy Robertson

-----Original Message-----
From: Daniel Kulp [mailto:dkulp@apache.org] 
Sent: Wednesday, November 09, 2011 10:53 AM
To: users@cxf.apache.org
Cc: Jeremy Robertson
Subject: Re: CXF/JAXB Code-first service: modify XMLSchemaType of inputs

On Tuesday, November 08, 2011 9:19:45 PM Jeremy Robertson wrote:
> I am working on a CXF/JAXB code-first web service. I would like to be able
> to modify the WSDL definitions of some of the inputs.
> 
> For example, given the following interface snippet:
> 
>     @WebMethod
>     public void Something(@WebParam(name="date") Date date);
> 
> The WSDL will generate the XMLSchema for the input "date" to be a "datetime"
> xml element. I would like it to be simply a "date" element instead.
> 
> It would also be nice to be able to specify the some of the other input
> attributes, such as minOccurs, etc.
> 
> For a custom object, the sub-elements can define all of these things through
> annotations such as XmlElement and XmlSchemaType. However, these
> annotations are not legal on an input parameter.
> 
> I know earlier versions of CXF did not handle this, but I'm not sure about
> the later versions. I'm currently running CXF 2.3.5.

There are three ways to handle this:

1) Endorse the JAXB 2.2 API jar via one of the JDK endorsement mechanisms.   
Then the XmlElement and XmlSchemaType annotations can be used on the 
parameter.

2) Create the wrapper type beans (you can use java2ws -warpperBeans as a 
starting point) and add the @RequestWrapper/@ResponseWrapper annotations to 
the method to point at them.   You can finely control the appearance of the 
wrapper schema via annotations in the beans.

3) You CAN configure extra subclasses of AbstractServiceConfiguration into the 
factories where you override some of the methods to set various 
minOccurs/maxOccurs/etc.. type things.   VERY fine level of control, but very 
complex to do.



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


 NOTICE: This email message is for the sole use of the intended recipient(s) and may contain confidential and privileged information. Any unauthorized review, use, disclosure or distribution is prohibited. If you are not the intended recipient, please contact the sender by reply email and destroy all copies of the original message.



Re: CXF/JAXB Code-first service: modify XMLSchemaType of inputs

Posted by Daniel Kulp <dk...@apache.org>.
On Tuesday, November 08, 2011 9:19:45 PM Jeremy Robertson wrote:
> I am working on a CXF/JAXB code-first web service. I would like to be able
> to modify the WSDL definitions of some of the inputs.
> 
> For example, given the following interface snippet:
> 
>     @WebMethod
>     public void Something(@WebParam(name="date") Date date);
> 
> The WSDL will generate the XMLSchema for the input "date" to be a "datetime"
> xml element. I would like it to be simply a "date" element instead.
> 
> It would also be nice to be able to specify the some of the other input
> attributes, such as minOccurs, etc.
> 
> For a custom object, the sub-elements can define all of these things through
> annotations such as XmlElement and XmlSchemaType. However, these
> annotations are not legal on an input parameter.
> 
> I know earlier versions of CXF did not handle this, but I'm not sure about
> the later versions. I'm currently running CXF 2.3.5.

There are three ways to handle this:

1) Endorse the JAXB 2.2 API jar via one of the JDK endorsement mechanisms.   
Then the XmlElement and XmlSchemaType annotations can be used on the 
parameter.

2) Create the wrapper type beans (you can use java2ws -warpperBeans as a 
starting point) and add the @RequestWrapper/@ResponseWrapper annotations to 
the method to point at them.   You can finely control the appearance of the 
wrapper schema via annotations in the beans.

3) You CAN configure extra subclasses of AbstractServiceConfiguration into the 
factories where you override some of the methods to set various 
minOccurs/maxOccurs/etc.. type things.   VERY fine level of control, but very 
complex to do.



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