Created
January 28, 2012 13:14
-
-
Save zaneli/1694266 to your computer and use it in GitHub Desktop.
「Commons Digester で XML to Java バインディング」ブログ用
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.zaneli.xml.bind; | |
import java.io.File; | |
import java.io.IOException; | |
import java.io.InputStream; | |
import java.io.Reader; | |
import org.apache.commons.digester3.Digester; | |
import org.xml.sax.InputSource; | |
import org.xml.sax.SAXException; | |
import com.zaneli.xml.model.Content; | |
import com.zaneli.xml.model.Entry; | |
import com.zaneli.xml.model.Feed; | |
import com.zaneli.xml.model.Link; | |
import com.zaneli.xml.model.Person; | |
public class FeedDigester { | |
private static final Digester digester; | |
static { | |
digester = new Digester(); | |
// XML 名前空間をサポートするように指定 | |
digester.setNamespaceAware(true); | |
// ルートのデフォルト名前空間を設定 | |
digester.setRuleNamespaceURI("http://www.w3.org/2005/Atom"); | |
digester.addObjectCreate("feed", Feed.class); | |
digester.addObjectCreate("feed/entry", Entry.class); | |
digester.addSetNext("feed/entry", "setEntry"); | |
digester.addObjectCreate("feed/entry/content", Content.class); | |
digester.addSetNext("feed/entry/content", "setContent"); | |
// content の type 属性を Content クラスの type プロパティにセット | |
digester.addSetProperties("feed/entry/content", "type", "type"); | |
// person のデフォルト名前空間を設定 | |
digester.setRuleNamespaceURI("http://ns.opensocial.org/2008/opensocial"); | |
digester.addObjectCreate("feed/entry/content/person", Person.class); | |
digester.addSetNext("feed/entry/content/person", "setPerson"); | |
digester.addBeanPropertySetter("feed/entry/content/person/id"); | |
digester.addBeanPropertySetter("feed/entry/content/person/displayName"); | |
digester.addBeanPropertySetter("feed/entry/content/person/nickname"); | |
digester.addBeanPropertySetter("feed/entry/content/person/thumbnailUrl"); | |
digester.addBeanPropertySetter("feed/entry/content/person/lastLogin"); | |
digester.addBeanPropertySetter("feed/entry/content/person/userHash"); | |
digester.addBeanPropertySetter("feed/entry/content/person/platformUserId"); | |
// ルートのデフォルト名前空間を設定 | |
digester.setRuleNamespaceURI("http://www.w3.org/2005/Atom"); | |
digester.addBeanPropertySetter("feed/entry/title"); | |
digester.addBeanPropertySetter("feed/entry/updated"); | |
digester.addBeanPropertySetter("feed/entry/author"); | |
digester.addBeanPropertySetter("feed/entry/id"); | |
digester.addObjectCreate("feed/entry/link", Link.class); | |
digester.addSetNext("feed/entry/link", "setLink"); | |
// link の 全属性を Link クラスの同名プロパティにセット | |
digester.addSetProperties("feed/entry/link"); | |
// osearch プレフィックスの名前空間を設定 | |
digester.setRuleNamespaceURI("http://a9.com/-/spec/opensearch/1.1"); | |
digester.addBeanPropertySetter("feed/startIndex", "startIndex"); | |
digester.addBeanPropertySetter("feed/totalResults", "totalResults"); | |
} | |
public Feed parse(InputStream in) throws IOException, SAXException { | |
return digester.parse(in); | |
} | |
public Feed parse(File file) throws IOException, SAXException { | |
return digester.parse(file); | |
} | |
public Feed parse(InputSource source) throws IOException, SAXException { | |
return digester.parse(source); | |
} | |
public Feed parse(Reader reader) throws IOException, SAXException { | |
return digester.parse(reader); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment