0

The www.odata.org website demonstrates how to consume OData services 'in 6 steps'. I'm stuck on Step 3 of the examples located directly on the homepage. I am purposely using only the standard Java 7 libraries. The below code produces a 400 response. I have verified that the URL is correct by attempting the same query using the Advanced Rest Client in Chrome.

Can anyone please show me how to successfully complete step 3 using only the standard Java 7 libraries?

URL url = new URL("http://services.odata.org/V4/TripPinServiceRW/People?$top=2&$filter=Trips/any(d:d/Budget gt 3000)");
HttpURLConnection c = (HttpURLConnection) url.openConnection();
c.setRequestProperty("accept", "application/json");
c.setRequestProperty("Content-Type", "application/json");
c.setRequestMethod("GET");

BufferedReader in = new BufferedReader(new InputStreamReader(c.getInputStream()));

String input;
StringBuilder sb = new StringBuilder();
while ((input = in.readLine()) != null) {
    sb.append(input);
}
in.close();

System.out.println(sb);
Michael Freake
  • 1,197
  • 2
  • 14
  • 35

2 Answers2

0

try changing c.getInputStream() to c.getOutputStream() :

BufferedReader in = new BufferedReader(new InputStreamReader(c.getInputStream()));

-->

BufferedReader in = new BufferedReader(new InputStreamReader(c.getOutputStream()));

by the way, if you want to create a java client for consuming OData service, I would recommend Apache Olingo java client. @ https://git-wip-us.apache.org/repos/asf?p=olingo-odata4.git;a=blob;f=fit/src/test/java/org/apache/olingo/fit/proxy/v4/EntitySetTestITCase.java;h=ccf956d4fc818ee0545a28bf8f6d8b3461b7da5c;hb=HEAD , it is a test case showing how easy it is to query an OData service:

for (Customer customer : container.getCustomers()) 
{ 
  assertNotNull(customer);  
  count++;  
}
challenh
  • 86
  • 1
0

Well you need to encode spaces on your URL like this: URL url = new URL("http://services.odata.org/V4/TripPinServiceRW/People?$top=2&$filter=Trips/any(d:d/Budget%20gt%203000)");

Here is working code:

URL url = new URL("http://services.odata.org/V4/TripPinServiceRW/People?$top=2&$filter=Trips/any(d:d/Budget gt 3000)");
URL urlToEncode = new URL(url);
URI uri = new URI(urlToEncode.getProtocol(), urlToEncode.getUserInfo(), urlToEncode.getHost(), urlToEncode.getPort(), urlToEncode.getPath(), urlToEncode.getQuery(), urlToEncode.getRef());

HttpURLConnection c = (HttpURLConnection) uri.toURL().openConnection();
c.setRequestProperty("accept", "application/json");
c.setRequestMethod("GET");

BufferedReader in = new BufferedReader(newInputStreamReader(c.getInputStream()));

see more here

Community
  • 1
  • 1
FrAn
  • 444
  • 3
  • 7
  • I was not performing the URI encoding as I completed Step 1 and 2 on the www.odata.org website without doing so. However, as a best practice I'm going to always perform encoding from now on. Thanks. – Michael Freake Jan 30 '15 at 16:01