Reputation: 12621
UPDATE
I have almost been able to complete my RESTful communication, though I have to questions remaining:
1 - How do I assign my XML to the connection (the code below will give an example of my situation)?
Calling the Web Service
public Person getByAccount(Account account) {
URL url = new URL(uri);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Accept", "application/xml");
XStream xstream = new XStream();
String xmlIn = xstream.toXML(account);
// Put the xmlIn into the connection
BufferedReader br = new BufferedReader(new InputStreamReader(
(connection.getInputStream())));
StringBuilder sb = new StringBuilder();
String line;
while((line = br.readLine()) != null)
sb.append(line);
String xmlOut = sb.toString();
connection.disconnect();
return (Person) xstream.fromXML(xmlOut);
}
2 - Will the class below result in a valid XML-output, considering the last code example (the Web Service)?
Class to send using RESTful
@XmlRootElement(name="people")
public class People {
@XmlElement(name="person")
public List<Person> people;
public People() {
people.add(new Person(1, "Jan"));
people.add(new Person(2, "Hans"));
people.add(new Person(3, "Sjaak"));
}
public List<Person> all() {
return people;
}
public Person byName(String name) {
for(Person person : people)
if(person.name.equals(name))
return person;
return null;
}
public void add(Person person) {
people.add(person);
}
public Person update(Person person) {
for(int i = 0; i < people.size(); i++)
if(person.id == people.get(i).id) {
people.set(i, person);
return person;
}
return null;
}
public void remove(Person person) {
people.remove(person);
}
}
Web Service
@GET
@Path("/byAccount")
@Consumes("application/xml")
@Produces("application/xml")
public Person getByAccount(Account account) {
// business logic
return person;
}
Upvotes: 3
Views: 30944
Reputation: 15434
Try this:
conn.setDoOutput(true);
OutputStream output = conn.getOutputStream();
// And write your xml to output stream.
Check this link for using REST with standard URL
: http://rest.elkstein.org/2008/02/using-rest-in-java.html
EDIT
First of all, you need to change your getByAccount
request to POST
request, because GET
request doesn't allow to pass any information in body, it uses only request parameters in url. But you send XML, so use POST
.
Try following version of your send method:
public Person getByAccount(Account account) {
URL url = new URL(uri);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Accept", "application/xml");
connection.setOutput(true);
XStream xstream = new XStream();
xstream.toXML(account, connection.getOutputStream());
Person person = (Person) xstream.fromXML(connection.getInputStream());
connection.disconnect();
return person;
}
Upvotes: 4
Reputation: 12084
You can try Spring 3 RestTemplate
. Very easy to get started and quite powerful.
More here: http://blog.springsource.org/2009/03/27/rest-in-spring-3-resttemplate/
http://www.baeldung.com/2012/04/16/how-to-use-resttemplate-with-basic-authentication-in-spring-3-1/
Upvotes: 0
Reputation: 4693
You could use Jersey Client API, (one more link) for most sufficient calls.
Upvotes: 1