package com.evolveum.midpoint.prism.lex.json; import java.io.IOException; import javax.xml.namespace.QName; import com.evolveum.midpoint.util.QNameUtil; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.jsontype.TypeDeserializer; public class QNameDeserializer extends JsonDeserializer<QName>{ @Override public QName deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { //System.out.println("tralalaaaaa QName deserializer"); // Object ob = jp.getEmbeddedObject(); // JsonNode node = jp.getCodec().readTree(jp); // JsonNode node = (JsonNode) ob; // TreeTraversingParser treeParser = (TreeTraversingParser) jp; // if (jp.getCurrentToken() == JsonToken.START_OBJECT){ // } // jp. ObjectMapper m = new ObjectMapper(); JsonNode node = m.readValue(jp, JsonNode.class); // JsonNode node = jp.readValueAsTree(); // jp. switch (node.getNodeType()) { case OBJECT: return deserializeFromObject(node); // break; case STRING: return deserializeFromString(node); // break; default: throw new IllegalStateException(); // break; } } private QName deserializeFromObject(JsonNode node){ JsonNode qnameNode = node.get("@namespace"); String namespace = null; if (qnameNode != null){ namespace = qnameNode.asText(); } qnameNode = node.get("@localPart"); String localPart = null; if (qnameNode != null){ localPart = qnameNode.asText(); } return new QName(namespace, localPart); } private QName deserializeFromString(JsonNode node){ String qnameUri = node.asText(); return QNameUtil.uriToQName(qnameUri, true); // return new QName(node.asText()); } @Override public Object deserializeWithType(JsonParser jp, DeserializationContext ctxt, TypeDeserializer typeDeserializer) throws IOException, JsonProcessingException { // TODO Auto-generated method stub return super.deserializeWithType(jp, ctxt, typeDeserializer); } }