Hi
I may have got confused
So you need a form sequence where every value is a complex property ?
Unfortunately JAX-RS does not support helping in this case, but you can
have a method signature with multiple @FormParam() parameters, and use a
proxy based API, so in this case by registering a custom
MyParamConverterProvider you can get that to/from String conversion code
moved out of the beans to this provider...
Thanks, Sergey
On 17/12/15 05:09, Maxim Solodovnik wrote:
Hello Sergey,
thanks for the quick response,
maybe you have some example/test I can take a look at? cause currently I
need to create methods like:
Response resp = getClient(USER_SERVICE_URL)
.path("/hash")
.query("sid", r.getMessage())
.form(new Form().param("user", new
JSONObject(user).toString()).param("options", new
JSONObject(options).toString()));
public static BeanA fromString(String s) {
JSONObject o = new JSONObject(s);
BeanA b = new BeanA();
b.prop1 = o.getString("prop1");
b.prop2 = o.getString("prop2");
b.prop3 = o.getString("prop3");
b.prop4 = o.getString("prop4");
return b;
}
in my beans, which I believe should be done somehow automatically
without this code I'm getting
Parameter Class org.apache.openmeetings.package.BeanA has no constructor
with single String parameter, static valueOf(String) or fromString(String)
methods
On Wed, Dec 16, 2015 at 4:23 PM, Sergey Beryozkin <[email protected]>
wrote:
Hi Max
It is unfortunate Form accepts parameters with String values, I think we
missed it should be Object instead given that ParamConverterProvider is
available in JAX-RS 2.0.
form() can deal with MultipartMap - CXF ships MetadataMap which implements
it, and JAX-RS 2.0 ships a simple implementation too:
https://jax-rs-spec.java.net/nonav/2.0-rev-a/apidocs/javax/ws/rs/core/MultivaluedHashMap.html
You'll still need registering ParamConverterProvider if values are not
String and the beans do not override toString()
HTH, Sergey
It has to be MultivaluedMap, JAX-RS
On 16/12/15 10:04, Maxim Solodovnik wrote:
Hello All,
I'm currently trying to write RS service accepting 2 objects of different
types as parameters:
ex. code:
@WebService(serviceName="org.apache.openmeetings.webservice.UserWebService")
@Features(features = "org.apache.cxf.feature.LoggingFeature")
@Produces({MediaType.APPLICATION_JSON})
@Path("/user")
public class UserWebService {
@POST
@Path("/hash")
public ServiceResult getRoomHash(
@FormParam("user") BeanA user
, @FormParam("options") BeanB options
) throws ServiceException
{}
}
and I'm trying to invoke this method from JUnit test:
ExternalUserDTO user = new ExternalUserDTO();
RoomOptionsDTO options = new RoomOptionsDTO();
Map<String, List<Object>> map = new LinkedHashMap<>();
map.put("user", Arrays.asList((Object)user));
map.put("options", Arrays.asList((Object)options));
Response resp = getClient(USER_SERVICE_URL)
.path("/hash")
.form(map);
//throws no body wrapper for LinkedHashMap class
I cannot use .form(new Form().....) due to it can only accepts string
parameters
can someone please point me to an example or provide with the hint how
this
can be implemented
Thanks in advance
--
Sergey Beryozkin
Talend Community Coders
http://coders.talend.com/
--
Sergey Beryozkin
Talend Community Coders
http://coders.talend.com/