public void writeValue(Object value, QName schemaType, boolean isAttribute) { if (characterEscapeHandler != null && value instanceof String) { try { StringWriter stringWriter = new StringWriter(); characterEscapeHandler.escape(((String)value).toCharArray(), 0, ((String)value).length(), isAttribute, stringWriter); value = stringWriter.toString(); } catch (IOException e) { throw XMLMarshalException.marshalException(e); } } boolean textWrapperOpened = false; if(!isLastEventStart){ openStartElement(textWrapperFragment, namespaceResolver); textWrapperOpened = true; } T currentLevel = position; String keyName = position.getKeyName(); if(!position.isComplex){ currentLevel = (T)position.parentLevel; } addValue(currentLevel, keyName, value, schemaType); isLastEventStart = false; if(textWrapperOpened){ endElement(textWrapperFragment, namespaceResolver); } }
@Override public void openStartElement(XPathFragment xPathFragment, NamespaceResolver namespaceResolver) { super.openStartElement(xPathFragment, namespaceResolver); if(position != null){ T newLevel = createNewLevel(false, position); if(isLastEventStart){ //this means 2 startevents in a row so the last this is a complex object setComplex(position, true); } String keyName = getKeyName(xPathFragment); if (keyName != null && !keyName.equals(Constants.EMPTY_STRING)) { if (position.isCollection && position.isEmptyCollection()) { position.setKeyName(keyName); startEmptyCollection(); } else { newLevel.setKeyName(keyName); } } position = newLevel; isLastEventStart = true; } }
String keyName = position.getKeyName(); setComplex(position, false); writeEmptyCollection((T)position.parentLevel, keyName);
String keyName = position.getKeyName(); setComplex(position, false); writeEmptyCollection((T)position.parentLevel, keyName);
public void writeValue(Object value, QName schemaType, boolean isAttribute) { if (characterEscapeHandler != null && value instanceof String) { try { StringWriter stringWriter = new StringWriter(); characterEscapeHandler.escape(((String)value).toCharArray(), 0, ((String)value).length(), isAttribute, stringWriter); value = stringWriter.toString(); } catch (IOException e) { throw XMLMarshalException.marshalException(e); } } boolean textWrapperOpened = false; if(!isLastEventStart){ openStartElement(textWrapperFragment, namespaceResolver); textWrapperOpened = true; } T currentLevel = position; String keyName = position.getKeyName(); if(!position.isComplex){ currentLevel = (T)position.parentLevel; } addValue(currentLevel, keyName, value, schemaType); isLastEventStart = false; if(textWrapperOpened){ endElement(textWrapperFragment, namespaceResolver); } }
@Override public void openStartElement(XPathFragment xPathFragment, NamespaceResolver namespaceResolver) { super.openStartElement(xPathFragment, namespaceResolver); if(position != null){ T newLevel = createNewLevel(false, position); if(isLastEventStart){ //this means 2 startevents in a row so the last this is a complex object setComplex(position, true); } String keyName = getKeyName(xPathFragment); if(position.isCollection && position.isEmptyCollection() ){ position.setKeyName(keyName); startEmptyCollection(); }else{ newLevel.setKeyName(keyName); } position = newLevel; isLastEventStart = true; } }
protected void setComplex(Level level, boolean complex){ boolean isAlreadyComplex = level.isComplex; super.setComplex(level, complex); if(complex && !isAlreadyComplex){ Level parentLevel = level.parentLevel; if(parentLevel != null && parentLevel.isCollection && parentLevel.isEmptyCollection()){ parentLevel.setEmptyCollection(false); } if((parentLevel != null && parentLevel.isCollection && !parentLevel.isEmptyCollection()) || level.keyName == null){ jsonGenerator.writeStartObject(); }else{ jsonGenerator.writeStartObject(level.keyName); } } }
protected void setComplex(Level level, boolean complex){ boolean isAlreadyComplex = level.isComplex; super.setComplex(level, complex); if(complex && !isAlreadyComplex){ Level parentLevel = level.parentLevel; if(parentLevel != null && parentLevel.isCollection && parentLevel.isEmptyCollection()){ parentLevel.setEmptyCollection(false); } if((parentLevel != null && parentLevel.isCollection && !parentLevel.isEmptyCollection()) || level.keyName == null){ jsonGenerator.writeStartObject(); }else{ jsonGenerator.writeStartObject(level.keyName); } } }
protected T createNewLevel(boolean collection, T parentLevel){ return (T)new Level(collection, position); }
protected void setComplex(T level, boolean complex){ level.setComplex(complex); }
protected void setComplex(T level, boolean complex){ level.setComplex(complex); }
@Override public void startDocument(String encoding, String version) { if(isRootArray){ if(position == null){ startCollection(); } position.setEmptyCollection(false); position = createNewLevel(false, position); isLastEventStart = true; }else{ startRootObject(); } }
@Override public void startDocument(String encoding, String version) { if(isRootArray){ if(position == null){ startCollection(); } position.setEmptyCollection(false); position = createNewLevel(false, position); isLastEventStart = true; }else{ startRootObject(); } }
protected T createNewLevel(boolean collection, T parentLevel){ return (T)new Level(collection, position); }
protected void startRootObject(){ super.startRootObject(); position.setKeyName(rootKeyName); setComplex(position, true); }
public Level(boolean isCollection, Level parentLevel) { setCollection(isCollection); emptyCollection = true; this.parentLevel = parentLevel; }
public void setCollection(boolean isCollection) { super.setCollection(isCollection); if(isCollection && jsonArrayBuilder == null){ jsonArrayBuilder = Json.createArrayBuilder(); } }
protected void finishLevel(){ if(!(position.isCollection && position.isEmptyCollection() && position.getKeyName() == null)){ jsonGenerator.writeEnd(); } super.finishLevel(); }
public Level(boolean isCollection, Level parentLevel) { setCollection(isCollection); emptyCollection = true; this.parentLevel = parentLevel; }
private void addValue(T currentLevel, String keyName, Object value, QName schemaType){ if(currentLevel.isCollection()){ addValueToArray(currentLevel, value, schemaType); currentLevel.setEmptyCollection(false); } else { addValueToObject(currentLevel, keyName, value, schemaType); } } protected abstract void addValueToObject(T currentLevel, String keyName, Object value, QName schemaType);