Please see comments below
On 07/06/13 17:21, Gonzalo Aguilar Delgado wrote:
Hello,
El 07/06/13 11:51, Sergey Beryozkin escribió:
Hi
On 07/06/13 10:13, Gonzalo Aguilar Delgado wrote:
Hello,

I'm using CXF to create some services. I've found that complex input
parameters are not generated on description. So they cannot be handled
right by clients.

     @GET
     @Path("/list/detail/{query}/get")
     @WebMethod(operationName = "queryDetails")
     @WebResult(name = "response")
     public ServiceResponse<?> queryDetails(
             @Description("Query to be performed on server")
             @WebParam(name="query")
             @PathParam("query") @QueryParam("query") MerchantQuery
query);


-----

MerchantQuery is defined with setters and getters like this:


@XmlRootElement(name = "MerchantQuery")
@XmlType(name = "MerchantQuery", namespace =
"http://api.enterprise.level2crm.com";)
public class MerchantQuery implements IMerchantQuery {
     private static Logger log =
LoggerFactory.getLogger(MerchantQuery.class);

     private String contactPerson;
     private String contactEmail;
     private String fullName;
     private String otherName;
     private String neighborhoodCode;
     private String idCountry;
     private String url;
     private String contactPhone;
     private String postalCode;

     public MerchantQuery() {
     }
     ...


But WADL skip it! Everything on Response it's handled right. Why not
input values?


What should I do to force generator do what it does with response
values?

Like this one:
<xs:complexType name="MerchantDetailData"><xs:sequence><xs:element
minOccurs="0" name="details" type="tns:MerchantDetailDTO"/><xs:element
minOccurs="0" name="identifiers"
type="tns:ResponseDataList"/><xs:element minOccurs="0" name="location"
type="tns:ResponseDataList"/></xs:sequence></xs:complexType>


The problem is you have the following:

      public ServiceResponse<?> queryDetails(
              @Description("Query to be performed on server")
              @WebParam(name="query")
              @PathParam("query") @QueryParam("query") MerchantQuery
query);

The first minor issue is that both @PathParam and @QueryParam are
available, choose one of them.

Yes! you are right. I introduced the second one to check if that worked.
But does not.


That said, the reason that no schema is generated is that @PathParam
and @QueryParam will identify some portion of request URI, which can
not be an XML fragment. If you had

public ServiceResponse<?> queryDetails(
              @Description("Query to be performed on server")
              @WebParam(name="query")
              MerchantQuery query);

Then the schema would be generated,

You are rigth! It generates. One thing that I didn't understand is that
it makes sense to me to not be able to send an Object (JSON) as path
parameter.

So what's the way to pass a JSON/XML object to this method via REST? Can
I do it in the body of the request? But how do I tell the service that
this param should go to the object query in the Service description?

Is this possible? Do I explain myself?

You can pass JSON in the body - this is a typical case, and you can get its schema generated as a positive side-effect, otherwise, if you really need to pass it as a (query or path) parameter then you need to get it encoded, make sure @Encoded is added too

Cheers, Sergey
Thank you in advance.



Sergey


Thank you.






--
Sergey Beryozkin

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

Blog: http://sberyozkin.blogspot.com

Reply via email to