Hi,
As previously stated[1] I'm creating a RESTful webservice, defined by this :
public class RestComputationService implements ComputationService {
@POST
@Path("/computation")
@Consumes("text/xml")
@Produces("text/xml")
@Override
public Response compute(Request request) {
return null;
}
}
Request and Response are quite misleading, they are *not* the one found
in the JAXRS package, they are generated from a schema.
I'd like to handle an exception like I would in CXF, that is something
like this :
Category cat = (Category) getCategoryDAO().getCategory(id);
if (cat == null) {
ResponseBuilder builder =
Response.status(Status.BAD_REQUEST);
builder.type("application/xml");
builder.entity("<error>Category Not Found</error>");
throw new WebApplicationException(builder.build());
}
I've read in "Camel in Action" that a possible way to do this is to use
something similar to this :
public class FailureResponseProcessor implements Processor {
public void process(Exchange exchange) throws Exception {
String body = exchange.getIn().getBody(String.class);
Exception e = exchange.getProperty(Exchange.EXCEPTION_CAUGHT,
Exception.class);
StringBuilder sb = new StringBuilder();
sb.append("ERROR: ");
sb.append(e.getMessage());
sb.append("\nBODY: ");
sb.append(body);
exchange.getIn().setBody(sb.toString());
}
}
But if I do this with my CXFRS webservice, I get a
CamelExecutionException caused by a InvalidPayloadException caused
itself by a NoTypeConversionAvailableException.
Indeed, what I put in the body (that is, a String) cannot be transformed
to an object of type Response by JAXB.
So, question, how can I return a custom response ?
Can I bypass JAXB and directly access the CXF rsServer in order to
respond to the client and tell Camel that it doesn't have to do anything
else - in other words, telling Camel its work is finished for this
request ?
Am I doing right or is my design completely flawed ?
Regards.
[1]
http://camel.465427.n5.nabble.com/CXFRS-and-XML-validation-td4428899.html
--
Bruno Dusausoy
YP5 Software
--
Pensez environnement : limitez l'impression de ce mail.
Please don't print this e-mail unless you really need to.