2013-09-24 3 views
3

J'essaie de convertir une chaîne JSON en objet Java à l'aide d'EclipseLink MOXy (liaisons JSON). Je reçois l'exception ci-dessous lorsque la chaîne JSON contient le caractère '\'. Voici un exemple de programme de ce que j'essaie de faire. Que dois-je faire pour échapper la barre oblique inverse afin que l'attribut de nom dans TestBean soit rempli comme "A \ B"?Liaisons EclipseLink MOXy JSON, problème d'échappement BackSlash ''

import java.io.StringReader; 
import javax.xml.bind.JAXBContext; 
import javax.xml.bind.JAXBException; 
import javax.xml.bind.Unmarshaller; 
import javax.xml.transform.stream.StreamSource; 
import org.eclipse.persistence.jaxb.UnmarshallerProperties; 

public class JSONMoxyTest { 

    public static void main(String[] args) throws JAXBException { 
     Unmarshaller unmarshaller = JAXBContext.newInstance(TestBean.class).createUnmarshaller(); 
     unmarshaller.setProperty(UnmarshallerProperties.MEDIA_TYPE, "application/json"); 
     unmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false); 
     String jsonStr = "{\"name\":\"A\\B\"}"; //{"name":"A\B"} 
     TestBean bean = unmarshaller.unmarshal(new StreamSource(new StringReader(jsonStr)), TestBean.class).getValue(); 
     System.out.println(bean.getName()); 
    } 
} 

class TestBean { 
    private String name; 
    public String getName() { 
    return name; 
    } 
    public void setName(String name) { 
    this.name = name; 
    } 
} 

Exception: 
line 1:10 no viable alternative at character '\' 
line 1:11 no viable alternative at character 'B' 
line 1:14 mismatched character '<EOF>' expecting '"' 
line 0:-1 no viable alternative at input '<EOF>' 
Exception in thread "main" javax.xml.bind.UnmarshalException 
- with linked exception: 
[Exception [EclipseLink-25004] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.XMLMarshalException 
Exception Description: An error occurred unmarshalling the document 
Internal Exception: NoViableAltException([email protected][])] 
    at org.eclipse.persistence.jaxb.JAXBUnmarshaller.handleXMLMarshalException(JAXBUnmarshaller.java:980) 
    at org.eclipse.persistence.jaxb.JAXBUnmarshaller.unmarshal(JAXBUnmarshaller.java:303) 
    at org.gs1us.glnreg.util.usps.JSONMoxyTest.main(JSONMoxyTest.java:17) 
Caused by: Exception [EclipseLink-25004] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.XMLMarshalException 
Exception Description: An error occurred unmarshalling the document 
Internal Exception: NoViableAltException([email protected][]) 
    at org.eclipse.persistence.exceptions.XMLMarshalException.unmarshalException(XMLMarshalException.java:113) 
    at org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.convertSAXException(SAXUnmarshaller.java:996) 
    at org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.unmarshal(SAXUnmarshaller.java:984) 
    at org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.unmarshal(SAXUnmarshaller.java:425) 
    at org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.unmarshal(SAXUnmarshaller.java:635) 
    at org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.unmarshal(SAXUnmarshaller.java:703) 
    at org.eclipse.persistence.oxm.XMLUnmarshaller.unmarshal(XMLUnmarshaller.java:655) 
    at org.eclipse.persistence.jaxb.JAXBUnmarshaller.unmarshal(JAXBUnmarshaller.java:301) 
    ... 1 more 
Caused by: NoViableAltException([email protected][]) 
    at org.eclipse.persistence.internal.oxm.record.json.JSONParser.value(JSONParser.java:673) 
    at org.eclipse.persistence.internal.oxm.record.json.JSONParser.pair(JSONParser.java:372) 
    at org.eclipse.persistence.internal.oxm.record.json.JSONParser.object(JSONParser.java:224) 
    at org.eclipse.persistence.internal.oxm.record.json.JSONParser.message(JSONParser.java:127) 
    at org.eclipse.persistence.internal.oxm.record.json.JSONReader.parse(JSONReader.java:124) 
    at org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.unmarshal(SAXUnmarshaller.java:972) 
    ... 6 more 

J'utilise ces pots: org.eclipse.persistence.antlr-2.5.0.jar, org.eclipse.persistence.asm-2.5.0.jar, org.eclipse.persistence.core-2.5 .0.jar, org.eclipse.persistence.moxy-2.5.0.jar

Répondre

1

Dans JSON, le caractère \ doit être protégé par \\.

corrigée JSONMoxyTest

import java.io.StringReader; 
import javax.xml.bind.*; 
import javax.xml.transform.stream.StreamSource; 
import org.eclipse.persistence.jaxb.UnmarshallerProperties; 

public class JSONMoxyTest { 

    public static void main(String[] args) throws JAXBException { 
     Unmarshaller unmarshaller = JAXBContext.newInstance(TestBean.class).createUnmarshaller(); 
     unmarshaller.setProperty(UnmarshallerProperties.MEDIA_TYPE, "application/json"); 
     unmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false); 
     String jsonStr = "{\"name\":\"A\\\\B\"}"; //{"name":"A\\B"} 
     TestBean bean = unmarshaller.unmarshal(new StreamSource(new StringReader(jsonStr)), TestBean.class).getValue(); 
     System.out.println(bean.getName()); 
    } 

} 

sortie

A\B 
Questions connexes