My ZK project doesn't see Jersey MessageBodyWriter when I do request to the server.
Client client = ClientBuilder.newClient();
WebTarget baseTarget = client.target("target");
Response postResponse = baseTarget.request().post(Entity.text(transaction));
add to web.xml:
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>ua.sustavov.payment.service, org.codehaus.jackson.jaxrs</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
MessageBodyWriter:
@Provider
@Produces(MediaType.TEXT_PLAIN)
public class TransactionMessageBodyWriter implements MessageBodyWriter<Transaction> {
@Override
public boolean isWriteable(Class<?> aClass, Type type, Annotation[] annotations, MediaType mediaType) {
return Transaction.class.isAssignableFrom(aClass);
}
@Override
public void writeTo(Transaction transaction, Class<?> aClass, Type type, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, Object> multivaluedMap, OutputStream outputStream) throws IOException, WebApplicationException {
outputStream.write(transaction.toString().getBytes());
}
@Override
public long getSize(Transaction transaction, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) {
return -1;
}
When I whant to send request? my App doesn't see MessageBodyWriter Thanks!
The writer is not going to get picked up by the Client
automatically, like it would on the server side (when package scanning). You need to explicitly register it
Client client = ClientBuilder.newClient();
client.register(TransactionMessageBodyWriter.class);
Or you can even register it with the WebTarget
WebTarget baseTarget = client.target("target");
baseTarget.register(TransactionMessageBodyWriter.class);