2013-04-08 5 views
7

ich eine REST-API am Zugriff auf eine URL, die mir folgende JSON Ergebnis liefert:Jackson Unerwartete Zeichen ('h' (Code 104)): erwartet ein gültiger Wert

{"size":1,"filter":{"applicationName":"xx.x1", 
"fromTimestamp":1261746800000, 
"toTimestamp":1361833200000, 
"company":"xx", 
"groupedBy":"COMPANY_APPLICATION"}, 

"values"[{"applicationName":"xx.x1","count":17,"company":"xx"}], 
"start":0,"limit":25,"lastPage":true} 

Jackson verwenden ich versuche zu analysieren die json auf diese Weise:

  ObjectMapper mapper = new ObjectMapper(); 

     try { 
     ErrorDataRest error = mapper.readValue(url, ErrorDataRest.class); 
     Map<String,Object> map = mapper.readValue(url, Map.class); 

dosn't ganz gleich, ob ich die erste oder die zweite verwenden, erhalte ich diese Ausnahme:

dk.jyskebank.jee.core.exception.JyskeSystemException: Auto generated exception 
at dk.sd.dumpmonitor.domainservice.RestErrorServiceBean.queryRESTurl(RestErrorServiceBean.java:46) 
at service.RestErrorServiceTest.testQueryRESTurl(RestErrorServiceTest.java:19) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) 
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) 
at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:236) 
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 
Caused by: org.codehaus.jackson.JsonParseException: Unexpected character ('h' (code 104)): expected a valid value (number, String, array, object, 'true', 'false' or 'null') 
at [Source: [email protected]; line: 1, column: 2] 
at org.codehaus.jackson.JsonParser._constructError(JsonParser.java:1433) 
at org.codehaus.jackson.impl.JsonParserMinimalBase._reportError(JsonParserMinimalBase.java:521) 
at org.codehaus.jackson.impl.JsonParserMinimalBase._reportUnexpectedChar(JsonParserMinimalBase.java:442) 
at org.codehaus.jackson.impl.ReaderBasedParser._handleUnexpectedValue(ReaderBasedParser.java:1198) 
at org.codehaus.jackson.impl.ReaderBasedParser.nextToken(ReaderBasedParser.java:485) 
at org.codehaus.jackson.map.ObjectMapper._initForReading(ObjectMapper.java:2770) 
at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2718) 
at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1863) 
at dk.sd.dumpmonitor.domainservice.RestErrorServiceBean.queryRESTurl(RestErrorServiceBean.java:43) 
... 25 more 

I habe keine Ahnung, was falsch ist oder wie es zu beheben ist.

Ich habe keinen Zugriff auf die Rest-API, aber ich weiß, dass es RESTeasy verwendet.

Das einzige, was ich will, ist die JSON-Antwort auf eine Java-Klasse zuordnen, also gibt es vielleicht eine andere Möglichkeit, es zu tun?

Antwort

24

Ich bin Ihre Variable url erraten ist ein String, eher als ein URL, so Jackson Parsen der URL, als ob es ein tatsächlicher JSON-String war. Dies würde das "Unerwartete Zeichen" h "erklären, da dies vermutlich der erste Buchstabe Ihrer URL ist (d. H. Http ... etwas.) Der Code" 104 "entspricht dem ASCII-Wert von" h ".

Wenn Sie mapper.readValue(new URL(url), ErrorDataRest.class); verwenden funktioniert es?

0

Das ist mir passiert ist, nachdem ich (plump und dummerweise) echo verwendet XML in eine Testdatei zu erhalten:

echo "<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"><s:Envelope>" \ 
> sampleXml 

Natürlich ist es all die Zitate verloren und verursacht dieses Problem für mich.

Stellen Sie sicher, dass alle Ihre Attribute ihre Anführungszeichen haben!

Verwandte Themen