I have this server:
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import javax.json.Json;
import javax.json.stream.JsonParser;
public class TestServer
{
static ServerSocket serverSocket = null;
static boolean done = false;
public static void main(String[] args)
{
try
{
serverSocket = new ServerSocket(9995);
// windows cmd: netstat -a -b -n | findstr 9995
}
catch (Exception e)
{
e.printStackTrace();
}
while (!done)
{
System.out.println("accepting connections on port " + serverSocket.getLocalPort());
try
{
Socket clientSocket = serverSocket.accept();
System.out.println("connection accepted");
Thread temp = new Thread(new ClientHandler(clientSocket));
temp.run();
}
catch (IOException e)
{
if (!done)
{
e.printStackTrace();
}
}
}
}// end main
}
class ClientHandler implements Runnable
{
Socket connection;
JsonParser parser;
ClientHandler(Socket connection)
{
this.connection = connection;
}
public void run()
{
System.out.println("someone connected from " + connection.getLocalAddress());
// http://docs.oracle.com/javaee/7/tutorial/doc/jsonp004.htm
try
{
parser = Json.createParser(connection.getInputStream());
while (connection.isConnected())
{
while (parser.hasNext())
{
JsonParser.Event event = parser.next();
switch (event)
{
case START_ARRAY:
case END_ARRAY:
case START_OBJECT:
case END_OBJECT:
case VALUE_FALSE:
case VALUE_NULL:
case VALUE_TRUE:
System.out.println(event.toString());
break;
case KEY_NAME:
System.out.print(event.toString() + " "
+ parser.getString() + " - ");
break;
case VALUE_STRING:
case VALUE_NUMBER:
System.out.println(event.toString() + " "
+ parser.getString());
break;
}
}
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}// end ClientHandler
and this client for it:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.json.*;
import javax.json.JsonWriter;
public class TestClient
{
static Socket s;
static OutputStream output;
static InputStream input;
public static void main(String[] args)
{
try
{
s = new Socket("localhost", 9995);
output = s.getOutputStream();
input = s.getInputStream();
JsonWriter jsonWriter = Json.createWriter(output);
JsonObject hello = Json.createObjectBuilder()
.add("firstName", "Duke")
.add("lastName", "Java")
.add("age", 18)
.add("streetAddress", "100 Internet Dr")
.add("city", "JavaTown")
.add("state", "JA")
.add("postalCode", "12345")
.add("phoneNumbers", Json.createArrayBuilder()
.add(Json.createObjectBuilder()
.add("type", "mobile")
.add("number", "111-111-1111"))
.add(Json.createObjectBuilder()
.add("type", "home")
.add("number", "222-222-2222")))
.build();
jsonWriter.writeObject(hello);
}
catch (UnknownHostException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
and when I run the two (server first), I end up with this:
Exception in thread "main" javax.json.JsonException: I/O error while auto-detecting the encoding of stream
Where can I set the encoding type of the stream? what should I set it to? and do I need to do this for both the client and the server?
Thanks,