[ https://issues.apache.org/jira/browse/COCOON3-77?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13144968#comment-13144968 ]
Andre Juffer commented on COCOON3-77: ------------------------------------- # This patch file was generated by NetBeans IDE # It uses platform neutral UTF-8 encoding and \n newlines. --- Locally New +++ Locally New @@ -0,0 +1,126 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.cocoon.components.serializers.util; + +import org.json.JSONObject; +import org.json.JSONException; + +import org.xml.sax.SAXException; +import org.xml.sax.Attributes; + +/** + * A text serializer for JSON. This serializer expects all JSON text to be enclosed by a + * single element. It also checks whether or not the received JSON text is valid. + * @author André Juffer, Triacle Biocomputing + * + * @see <a href="http://www.json.org/">JSON.org</a> + */ +public class JsonSerializer extends TextSerializer { + + StringBuilder jsonString; + boolean element; + + public JsonSerializer() + throws Exception + { + super(); + this.jsonString = new StringBuilder(); + this.element = false; + } + + @Override + public String getMimeType() + { + return "application/json; charset=" + this.charset.getName(); + } + + @Override + public void characters(char[] chars, + int start, + int len) + throws SAXException + { + if ( this.element ) + { + String s = new String(chars, start, len); + this.jsonString.append(s); + } + super.characters(chars, start, len); + } + + @Override + public void startElement(String uri, + String localName, + String qName, + Attributes atts) + throws SAXException + { + this.element = true; + super.startElement(uri, uri, uri, atts); + + } + + /** + * Validates JSON. + * @throws SAXException if JSON is invalid. + */ + @Override + public void endElement(String uri, + String localName, + String qName) + throws SAXException + { + String s = this.jsonString.toString(); + try + { + JSONObject jsonObject = new JSONObject(s); + } + catch (JSONException exception) + { + throw new SAXException(s + ": Invalid JSON.", exception); + } + super.endElement(uri, localName, qName); + } + + @Override + public void recycle() + { + this.jsonString = new StringBuilder(); + this.element = false; + super.recycle(); + } + + + @Override + public String toString() + { + String newline = System.getProperty("line.separator"); + + StringBuilder s = new StringBuilder(this.getClass().getName() + " : [" + newline); + if ( this.charset != null ) + s.append("charset - ").append(this.charset.toString()); + if ( this.doctype != null ) + s.append("").append(this.doctype.toString()).append(newline); + s.append("mime-type - ").append(this.getMimeType()).append(newline); + s.append("]").append(newline); + + return s.toString(); + } +} > Text and JSON serializers > ------------------------- > > Key: COCOON3-77 > URL: https://issues.apache.org/jira/browse/COCOON3-77 > Project: Cocoon 3 > Issue Type: Improvement > Components: cocoon-optional > Affects Versions: 3.0.0-alpha-3 > Reporter: Andre Juffer > Priority: Minor > Attachments: EncodingJsonSerializer.java, > EncodingTextSerializer.java, JsonSerializer.java, TextEncoder.java, > TextSerializer.java, pom.xml, tribc-cocoon-3.xml > > > Serveral classes have been created for serializing text and JSON in the > sitemap. The JsonSerializer also checks whether the JSON text actually is > valid. The organization of the classes follows the encoding serializers (such > as the EncodingHTMLSerializer). -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira