public static InputStream jsonWithToken() throws IOException {
HttpClient httpClient = HttpClientBuilder.create().build();
HttpGet httpGet = new HttpGet(uri);
//计算token
String token = TokenCalculateUtils.base64Token(userColonPassword);
httpGet.setHeader("Authorization", "Basic " + token);
try {
HttpResponse response = httpClient.execute(httpGet);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode == 200) {
HttpEntity httpEntity = response.getEntity();
return httpEntity.getContent();
} else {
System.out.println("响应失败:" + statusCode);
return null;
}
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
public static void dataSaveOrUpdate(InputStream inputStream) throws IOException {
JsonFactory jsonFactory = new MappingJsonFactory();
JsonParser jsonParser = null;
SessionFactory sessionFactory = null;
Session session = null;
try {
jsonParser = jsonFactory.createParser(inputStream);
JsonToken jsonToken = jsonParser.nextToken();
if (jsonToken != JsonToken.START_OBJECT) {
System.out.println("Error: root should be object: quiting.");
return;
}
while (jsonParser.nextToken() != JsonToken.END_OBJECT) {
String fieldName = jsonParser.getCurrentName();
if (fieldName.equals("results")) {
if (jsonParser.nextToken() == JsonToken.START_ARRAY) {
//读取配置文件,获取数据库元信息对象,configure()默认加载hibernate.cfg.xml,如需自定义配置文件名,将文件名作为参数传递
final StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();
sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
session = sessionFactory.openSession();
while (jsonParser.nextToken() != JsonToken.END_ARRAY) {
**_//出错位置!!!_**
JsonNode node = jsonParser.readValueAsTree();
Transaction transaction = session.beginTransaction();
JushaAreaCustomer jushaAreaCustomer = new JushaAreaCustomer();
jushaAreaCustomer.setCustomerIndex(node.get("CACCOUNT_UUID").textValue());
jushaAreaCustomer.setCustomerText(node.get("TACCOUNT_UUID").textValue());
jushaAreaCustomer.setAreaIndex(node.get("CUUID_CONTENT").textValue());
jushaAreaCustomer.setAreaText(node.get("TUUID_CONTENT").textValue());
jushaAreaCustomer.setUpdateTime(new Timestamp(System.currentTimeMillis()));
session.saveOrUpdate(jushaAreaCustomer);
transaction.commit();
System.out.println(n);
}
} else {
System.out.println("Error: records should be an array: skipping.");
jsonParser.skipChildren();
}
} else if (!fieldName.equals("__count")) {//如果当前未到所
// 需字段层级则进入下一层,__count为所需字段层级中第一个字段
System.out.println("Unprocessed property: " + fieldName);
jsonParser.nextToken();
} else {//如果当前已到所需字段层级,则跳至所需字段
System.out.println("Unprocessed property: " + fieldName);
jsonParser.skipChildren();
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (session != null) {
session.close();
}
if (sessionFactory != null) {
sessionFactory.close();
}
if (jsonParser != null) {
jsonParser.close();
}
inputStream.close();
}
}
url的服务器端给你的连接发了RST TCP包,(服务器主动断开了连接),原因可以有多种,比如服务器端检测到连接数太多,主动关一些连接(你的正好中了);或者服务器觉得session过期了,强制关掉你的连接。
你作为client端,只能被动接受,做好相应的异常处理/连接管理(比如重连)。