jpachube를 사용 중이며 creatDatastream에서 .POST와 관련된 문제가 있습니다. 나는 POST 오류 (400)를 받고, 그리고하고 COSM의 디버깅 도구에서 다음과 같은 세부 정보 :COSM JSON 파서 오류 (.POST)
{"title":"JSON Parser Error","errors":"lexical error: invalid char in json text. <? xmlversion=\"1.0\"encoding=\"U"}
다음과 같이 COSM 디버그 도구에서 내 XML 요청 본문은 다음과 같습니다 무엇 XML에 대한
<?xml version="1.0" encoding="UTF-8"?>
<eeml xmlns="http://www.eeml.org/xsd/005"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="5" xsi:schemaLocation="http://www.eeml.org/xsd/005 http://www.eeml.org/xsd/005/005.xsd"><environment><data id="0">
<tag>CPU</tag>
<current_value>0.0</current_value>
</data>
</environment>
</eeml>
COSM의 API 문서를
<eeml xmlns="http://www.eeml.org/xsd/0.5.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema- instance" version="0.5.1" xsi:schemaLocation="http://www.eeml.org/xsd/0.5.1 http://www.eeml.org/xsd/0.5.1/0.5.1.xsd">
<environment>
<data id="23">
<tag>apple</tag>
<tag>jag</tag>
<tag>tag</tag>
<tag>lag</tag>
<current_value>11</current_value>
<max_value>211.0</max_value>
<min_value>7.0</min_value>
<unit type="conversionBasedUnits" symbol="symbol">label</unit>
</data>
</environment>
을 다음과 같이 같아야 요청 본문입니다 내가 찾은 차이점은 버전 번호 뿐이었지만, 코드에서 이미 그 스위치를 만들었고 동일한 오류가 발생했습니다.
COSM API의 v2가 설정되어 xml과 JSON을 상호 교환 할 수 있다고 생각했지만 모든 것을 JSON으로 변환합니다.
오류가 없음을 알 입력 Pachube.java
public boolean createDatastream(int feed, String s) throws PachubeException {
HttpRequest hr = new HttpRequest("http://api.cosm.com/v2/feeds/"
+ feed + "/datastreams/");
hr.setMethod(HttpMethod.POST);
hr.addHeaderItem("X-PachubeApiKey", this.API_KEY);
hr.setBody(s);
HttpResponse g = this.client.send(hr);
if (g.getHeaderItem("Status").equals("HTTP/1.1 201 Created")) {
return true;
} else {
throw new PachubeException(g.getHeaderItem("Status"));
}
}
이 메소드 호출에서오고있다.
하루 두 ...
는 bjpirt (주셔서 감사)로부터의 입력을 이용하여 createDatastream 방법으로 수정. 방법이이 COSM 디버그 도구에 .POST에 대한 다음과 같은 오류가 발생이
public boolean createDatastream(int feed, String s) throws PachubeException {
HttpRequest hr = new HttpRequest("http://api.cosm.com/v2/feeds/"
+ feed + "/datastreams.xml");
hr.setMethod(HttpMethod.POST);
hr.addHeaderItem("X-PachubeApiKey", this.API_KEY);
hr.addHeaderItem("Content-Type:", "application/xml");
hr.setBody(s);
HttpResponse g = this.client.send(hr);
if (g.getHeaderItem("Status").equals("HTTP/1.1 201 Created")) {
return true;
} else {
Log.d("create data stream", "prob");
throw new PachubeException(g.getHeaderItem("Status"));
}
}
같습니다 (오류 코드 422) :
<?xml version="1.0" encoding="UTF-8"?><errors><title>Unprocessable Entity</title> <error>Stream ID has already been taken</error></errors>
그래서, 당연히,이 요청에 제목을 얻을 필요 . 즉 Data.java
public String toXMLWithWrapper() {
String ret = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<eeml xmlns=\"http://www.eeml.org/xsd/005\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" version=\"5\" xsi:schemaLocation=\"http://www.eeml.org/xsd/005 http://www.eeml.org/xsd/005/005.xsd\"><environment>";
ret = ret + ">\n\t<title>" + "cosm app" + "</title>\n\t";//inserted this line to add title
ret = ret + this.toXML() + "</environment></eeml>";
return ret;
}
에 toXMLWithWrapper 통해 수행 그리고 요청 본문처럼 보이는 (COSM 디버그 도구에서) :
<?xml version="1.0" encoding="UTF-8"?>
<eeml xmlns="http://www.eeml.org/xsd/005" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="5" xsi:schemaLocation="http://www.eeml.org/xsd/005 http://www.eeml.org/xsd/005/005.xsd"><environment>
<title>cosm app</title>
<data id="0">
<tag>CPU</tag>
<current_value >0.0</current_value>
</data></environment></eeml>
이 오류 코드로 돌아옵니다 500 (! 아야)
응답 몸은
<?xml version="1.0" encoding="UTF-8"?><errors><title>Oops, something's broken</title> <error>We've been unable to complete your request due to a problem with our server</error></errors>
일 세
,691입니다xml에 문제가 있다는 지적이있었습니다 (아래 참조). 오타가 수정되었고 422 오류로 돌아 왔습니다. 따라서 응답 본문을 더 자세히 살펴보면 데이터 스트림에 문제가있을 수 있다고 생각했습니다. 피드의 모든 데이터 스트림을 삭제하고 새 피드를 만들고 정확히 하나의 HTTP를 얻습니다 : /1.1 201 - 행복합니다. 맞습니까? 틀렸어. 첫 번째. 포스 후에 나는 아무것도 얻지 못한다. 앱을 껐다가 다시 켤 때 422 오류로 돌아가고 동일한 응답 본문 "스트림 ID가 이미 사용되었습니다". Yikes!
: https://github.com/cosm/cosm-java – errordeveloper
액세스가 거부를! 나는 제다이 (또는 무엇인가)가 아니기 때문에 나는 그것을 볼 수 없었다. – user2056097
제 개인적으로 베타 버전입니다. Cosm 지원팀에 이메일을 보내 액세스 권한을 얻을 수 있습니다. – errordeveloper