hello, I'm facing some difficulty to post a map to a jersey service
I'm successfully do the same with a list
first tthe client code
@Test
public void testPutHash() throws Exception {
System.out.println("testPutList --> START");
Map <String,String> hashPerso=new HashMap <String,String> ();
hashPerso.put("gadille1", "lionel");
hashPerso.put("gadille2", "luna");
for (String key : hashPerso.keySet()) {
System.out.println("key:"+key+"val:"+hashPerso.get(key));
}
HashPersos hp= new HashPersos();
hp.setHashPerso(hashPerso);
JAXBContext ctx = JAXBContext.newInstance(new Class
[]{com.gadille.Dao.HashPersos.class});
Marshaller m = ctx.createMarshaller();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
m.marshal(hp, baos);
m.marshal(hp, System.out);
PutMethod method = new PutMethod(URL_PREFIX + "putObject/hash");
RequestEntity request = new
ByteArrayRequestEntity(baos.toByteArray(),
"application/xml; charset=utf-8");
method.setRequestEntity(request);
HttpClient client = new HttpClient();
String rep=null;
try {
client.executeMethod(method);
assertEquals("Is Alive status code not valid",
HttpServletResponse.SC_OK, method.getStatusCode());
rep=method.getResponseBodyAsString();
} finally {
method.releaseConnection();
}
assertEquals("Object return","lionel<br>luna<br>", rep);
System.out.println("testPutList --> PASS");
}
//jersey serveur utility class embended my Map
package com.gadille.Dao;
import java.util.HashMap;
import java.util.Map;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class HashPersos {
Map <String,String> hashPerso=new HashMap <String,String> ();
public HashPersos(){
}
public Map<String, String> getHashPerso() {
return hashPerso;
}
public void setHashPerso(Map<String, String> hashPerso) {
this.hashPerso = hashPerso;
}
}
@PUT
@Path("/hash")
@Consumes(MediaType.APPLICATION_XML)
@Produces(MediaType.TEXT_HTML)
public String putHash(HashMap<String,String> hashPerso) { //JAXBElement
String html="";
for (String key : hashPerso.keySet()) {
html="key:"+key+" value:"+hashPerso.get(key)+"<br>";
}
return (html);
}
the error is :
GRAVE: A message body reader for Java class java.util.HashMap, and Java type
java.util.HashMap<java.lang.String, java.lang.String>, and MIME media type
application/xml;charset=utf-8 was not found
13 oct. 2010 17:24:26 com.sun.jersey.spi.container.ContainerRequest
getEntity
GRAVE: The registered message body readers compatible with the MIME media
type are:
application/xml;charset=utf-8 ->
com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$App
com.sun.jersey.core.impl.provider.entity.DocumentProvider
I take a look to the xml send :
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<hashPersos>
<hashPerso>
<entry><key>gadille1</key><value>lionel</value></entry>
<entry><key>gadille2</key><value>luna</value></entry>
</hashPerso>
</hashPersos>
I thing error come from client but .... i'm not sure and i don't know the
form of xml is hould send and how to do it
Here the code under cvs view
http://backuprsync.cvs.sourceforge.net/viewvc/backuprsync/jersey1/src/main/java/com/gadille/services/PutObject.java?view=markup
http://backuprsync.cvs.sourceforge.net/viewvc/backuprsync/jersey1/src/main/java/com/gadille/Dao/HashPersos.java?view=markup
http://backuprsync.cvs.sourceforge.net/viewvc/backuprsync/jersey1/src/test/java/com/gadille/TestHttClient.java?hideattic=0&view=markup&pathrev=MAIN
if you want to load the full project
http://sourceforge.net/projects/backuprsync/develop
modul Jersey1
Thanks , Lionel
--
View this message in context: http://jersey.576304.n2.nabble.com/Post-with-httpClient-a-map-to-a-jersey-service-tp5631495p5631495.html
Sent from the Jersey mailing list archive at Nabble.com.