Author: ieb
Date: Tue Oct 7 07:59:54 2008
New Revision: 702503
URL: http://svn.apache.org/viewvc?rev=702503&view=rev
Log:
SHINDIG-562
Added XSD validator utility with unit tests to ensure that xml output conforms
to the opensocial XSD.
The XSD in use is from the 0.8.1 published spec and is stored in resources.
Added:
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/util/XSDValidator.java
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/util/XSDValidatorTest.java
incubator/shindig/trunk/java/social-api/src/test/resources/org/
incubator/shindig/trunk/java/social-api/src/test/resources/org/apache/
incubator/shindig/trunk/java/social-api/src/test/resources/org/apache/shindig/
incubator/shindig/trunk/java/social-api/src/test/resources/org/apache/shindig/social/
incubator/shindig/trunk/java/social-api/src/test/resources/org/apache/shindig/social/opensocial/
incubator/shindig/trunk/java/social-api/src/test/resources/org/apache/shindig/social/opensocial/util/
incubator/shindig/trunk/java/social-api/src/test/resources/org/apache/shindig/social/opensocial/util/opensocial.xsd
incubator/shindig/trunk/java/social-api/src/test/resources/org/apache/shindig/social/opensocial/util/testschema1.xml
incubator/shindig/trunk/java/social-api/src/test/resources/org/apache/shindig/social/opensocial/util/testschema1bad.xml
Added:
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/util/XSDValidator.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/util/XSDValidator.java?rev=702503&view=auto
==============================================================================
---
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/util/XSDValidator.java
(added)
+++
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/util/XSDValidator.java
Tue Oct 7 07:59:54 2008
@@ -0,0 +1,77 @@
+/*
+ * 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.shindig.social.opensocial.util;
+
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXNotRecognizedException;
+import org.xml.sax.SAXParseException;
+import org.xml.sax.helpers.DefaultHandler;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.StringReader;
+import java.io.UnsupportedEncodingException;
+
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+import javax.xml.transform.Source;
+import javax.xml.transform.stream.StreamSource;
+import javax.xml.validation.Schema;
+import javax.xml.validation.SchemaFactory;
+import javax.xml.validation.Validator;
+
+/**
+ *
+ */
+public class XSDValidator {
+ private static final String JAXP_SCHEMA_LANGUAGE =
"http://java.sun.com/xml/jaxp/properties/schemaLanguage";
+
+ private static final String W3C_XML_SCHEMA =
"http://www.w3.org/2001/XMLSchema";
+
+ public static String validate(String xml, InputStream schema) {
+ try {
+ return validate(new ByteArrayInputStream(xml.getBytes("UTF-8")), schema);
+ } catch (UnsupportedEncodingException e) {
+ return e.getMessage();
+ }
+ }
+ public static String validate(InputStream xml, InputStream schema) {
+
+ SAXParserFactory factory = SAXParserFactory.newInstance();
+ factory.setNamespaceAware(true);
+ factory.setValidating(true);
+ final StringBuilder errors = new StringBuilder();
+ try {
+
+ SchemaFactory schemaFactory = SchemaFactory.newInstance(W3C_XML_SCHEMA);
+ Schema s = schemaFactory.newSchema(new StreamSource(schema));
+ System.err.println("Schema is "+s);
+ Validator validator = s.newValidator();
+ validator.validate(new StreamSource(xml));
+ } catch (IOException e) {
+ } catch (SAXException e) {
+ errors.append(e.getMessage()).append("\n");
+ }
+
+ return errors.toString();
+ }
+}
Added:
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/util/XSDValidatorTest.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/util/XSDValidatorTest.java?rev=702503&view=auto
==============================================================================
---
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/util/XSDValidatorTest.java
(added)
+++
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/util/XSDValidatorTest.java
Tue Oct 7 07:59:54 2008
@@ -0,0 +1,38 @@
+/*
+ * 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.shindig.social.opensocial.util;
+
+import junit.framework.TestCase;
+
+import org.apache.shindig.common.xml.XmlException;
+
+/**
+ *
+ */
+public class XSDValidatorTest extends TestCase {
+
+ /**
+ * Check that the XSDValidator is working correctly by testing for pass and
fail
+ * @throws XmlException
+ */
+ public void testValidator() throws XmlException {
+ assertEquals("",
XSDValidator.validate(this.getClass().getResourceAsStream("testschema1.xml"),this.getClass().getResourceAsStream("opensocial.xsd")));
+ assertNotSame("",
XSDValidator.validate(this.getClass().getResourceAsStream("testschema1bad.xml"),this.getClass().getResourceAsStream("opensocial.xsd")));
+ }
+
+}
Added:
incubator/shindig/trunk/java/social-api/src/test/resources/org/apache/shindig/social/opensocial/util/opensocial.xsd
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/resources/org/apache/shindig/social/opensocial/util/opensocial.xsd?rev=702503&view=auto
==============================================================================
---
incubator/shindig/trunk/java/social-api/src/test/resources/org/apache/shindig/social/opensocial/util/opensocial.xsd
(added)
+++
incubator/shindig/trunk/java/social-api/src/test/resources/org/apache/shindig/social/opensocial/util/opensocial.xsd
Tue Oct 7 07:59:54 2008
@@ -0,0 +1,626 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xs:schema xmlns:tns="http://ns.opensocial.org/2008/opensocial"
+ elementFormDefault="qualified"
+ targetNamespace="http://ns.opensocial.org/2008/opensocial"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema">
+ <xs:complexType name="ActivityCollection">
+ <xs:all>
+ <xs:element minOccurs="0" name="activities" type="tns:ArrayOfActivity" />
+ <xs:element minOccurs="0" name="itemsPerPage" type="xs:int" />
+ <xs:element minOccurs="0" name="startIndex" type="xs:long" />
+ <xs:element minOccurs="0" name="totalResults" type="xs:long" />
+ </xs:all>
+ </xs:complexType>
+ <xs:element name="ActivityCollection" type="tns:ActivityCollection" />
+ <xs:complexType name="ArrayOfActivity">
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" name="Activity"
type="tns:Activity" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="ArrayOfActivity" type="tns:ArrayOfActivity" />
+ <xs:complexType name="Activity">
+ <xs:all>
+ <xs:element minOccurs="0" name="appId" type="xs:string" />
+ <xs:element minOccurs="0" name="body" type="xs:string" />
+ <xs:element minOccurs="0" name="bodyId" type="xs:string" />
+ <xs:element minOccurs="0" name="externalId" type="xs:string" />
+ <xs:element minOccurs="0" name="id" type="xs:string" />
+ <xs:element minOccurs="0" name="mediaItems" type="tns:ArrayOfMediaItem"
/>
+ <xs:element minOccurs="0" name="postedTime" type="xs:long" />
+ <xs:element minOccurs="0" name="priority" type="xs:double" />
+ <xs:element minOccurs="0" name="streamFaviconUrl" type="xs:string" />
+ <xs:element minOccurs="0" name="streamSourceUrl" type="xs:string" />
+ <xs:element minOccurs="0" name="streamTitle" type="xs:string" />
+ <xs:element minOccurs="0" name="streamUrl" type="xs:string" />
+ <xs:element minOccurs="0" name="templateParams"
type="tns:ActivityTemplateParams" />
+ <xs:element minOccurs="0" name="title" type="xs:string" />
+ <xs:element minOccurs="0" name="titleId" type="xs:string" />
+ <xs:element minOccurs="0" name="url" type="xs:string" />
+ <xs:element minOccurs="0" name="userId" type="xs:string" />
+ </xs:all>
+ </xs:complexType>
+ <xs:element name="Activity" type="tns:Activity" />
+ <xs:complexType name="ArrayOfMediaItem">
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" name="MediaItem"
type="tns:MediaItem" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="ArrayOfMediaItem" type="tns:ArrayOfMediaItem" />
+ <xs:complexType name="MediaItem">
+ <xs:all>
+ <xs:element minOccurs="0" name="mimeType" type="xs:string" />
+ <xs:element minOccurs="0" name="type" type="tns:MediaItemType" />
+ <xs:element minOccurs="0" name="url" type="xs:string" />
+ </xs:all>
+ </xs:complexType>
+ <xs:element name="MediaItem" type="tns:MediaItem" />
+ <xs:simpleType name="MediaItemType">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="AUDIO" />
+ <xs:enumeration value="IMAGE" />
+ <xs:enumeration value="VIDEO" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:element name="MediaItemType" type="tns:MediaItemType" />
+ <xs:complexType name="ActivityTemplateParams">
+ <xs:all>
+ <xs:element minOccurs="0" name="PersonKey" type="xs:string" />
+ <xs:element minOccurs="0" name="PersonKey.DisplayName" type="xs:string"
/>
+ <xs:element minOccurs="0" name="PersonKey.Id" type="xs:string" />
+ <xs:element minOccurs="0" name="PersonKey.ProfileUrl" type="xs:string" />
+ <xs:element minOccurs="0" name="person" type="tns:person" />
+ </xs:all>
+ </xs:complexType>
+ <xs:element name="ActivityTemplateParams" type="tns:ActivityTemplateParams"
/>
+ <xs:complexType name="person">
+ <xs:all>
+ <xs:element minOccurs="0" name="aboutMe" type="xs:string" />
+ <xs:element minOccurs="0" name="activities" type="tns:ArrayOfActivities"
/>
+ <xs:element minOccurs="0" name="accounts" type="tns:account"/>
+ <xs:element minOccurs="0" name="anniversary" type="xs:dateTime" />
+ <xs:element minOccurs="0" name="birthday" type="xs:dateTime" />
+ <xs:element minOccurs="0" name="bodyType" type="tns:BodyType" />
+ <xs:element minOccurs="0" name="books" type="tns:ArrayOfBooks" />
+ <xs:element minOccurs="0" name="cars" type="tns:ArrayOfCars" />
+ <xs:element minOccurs="0" name="children" type="xs:string" />
+ <xs:element minOccurs="0" name="connected" type="tns:Presence" />
+ <xs:element minOccurs="0" name="currentLocation" type="tns:Address" />
+ <xs:element minOccurs="0" name="displayName" type="xs:string" />
+ <xs:element minOccurs="0" name="drinker" type="tns:Drinker" />
+ <xs:element minOccurs="0" name="emails" type="tns:ArrayOfEmail" />
+ <xs:element minOccurs="0" name="ethnicity" type="xs:string" />
+ <xs:element minOccurs="0" name="fashion" type="xs:string" />
+ <xs:element minOccurs="0" name="food" type="tns:ArrayOfFoods" />
+ <xs:element minOccurs="0" name="gender" type="xs:string" />
+ <xs:element minOccurs="0" name="happiestWhen" type="xs:string" />
+ <xs:element minOccurs="0" name="hasApp" type="xs:boolean" />
+ <xs:element minOccurs="0" name="heroes" type="tns:ArrayOfHeroes" />
+ <xs:element minOccurs="0" name="humor" type="xs:string" />
+ <xs:element minOccurs="0" name="id" type="xs:string" />
+ <xs:element minOccurs="0" name="ims" type="tns:ArrayOfIm"/>
+ <xs:element minOccurs="0" name="interests" type="tns:ArrayOfInterests" />
+ <xs:element minOccurs="0" name="jobInterests" type="xs:string" />
+ <xs:element minOccurs="0" name="languagesSpoken"
type="tns:ArrayOfLanguages" />
+ <xs:element minOccurs="0" name="livingArrangement" type="xs:string" />
+ <xs:element minOccurs="0" name="lookingFor" type="xs:string" />
+ <xs:element minOccurs="0" name="movies" type="tns:ArrayOfMovies" />
+ <xs:element minOccurs="0" name="music" type="tns:ArrayOfMusic" />
+ <xs:element minOccurs="0" name="name" type="tns:name" />
+ <xs:element minOccurs="0" name="nickname" type="xs:string" />
+ <xs:element minOccurs="0" name="organizations"
type="tns:ArrayOfOrganization" />
+ <xs:element minOccurs="0" name="pets" type="xs:string" />
+ <xs:element minOccurs="0" name="photos" type="tns:ArrayOfPhoto" />
+ <xs:element minOccurs="0" name="phoneNumbers" type="tns:ArrayOfPhone" />
+ <xs:element minOccurs="0" name="politicalViews" type="xs:string" />
+ <xs:element minOccurs="0" name="preferredUsername" type="xs:string" />
+ <xs:element minOccurs="0" name="profileSong" type="tns:Url" />
+ <xs:element minOccurs="0" name="profileUrl" type="xs:string" />
+ <xs:element minOccurs="0" name="profileVideo" type="tns:Url" />
+ <xs:element minOccurs="0" name="published" type="xs:dateTime"/>
+ <xs:element minOccurs="0" name="quotes" type="tns:ArrayOfQuotes" />
+ <xs:element minOccurs="0" name="relationships"
type="tns:ArrayOfRelationship" />
+ <xs:element minOccurs="0" name="relationshipStatus" type="xs:string" />
+ <xs:element minOccurs="0" name="religion" type="xs:string" />
+ <xs:element minOccurs="0" name="romance" type="xs:string" />
+ <xs:element minOccurs="0" name="scaredOf" type="xs:string" />
+ <xs:element minOccurs="0" name="sexualOrientation" type="xs:string" />
+ <xs:element minOccurs="0" name="smoker" type="tns:Smoker" />
+ <xs:element minOccurs="0" name="sports" type="tns:ArrayOfSports" />
+ <xs:element minOccurs="0" name="tags" type="tns:ArrayOfTags" />
+ <xs:element minOccurs="0" name="thumbnailUrl" type="xs:string" />
+ <xs:element minOccurs="0" name="turnOffs" type="tns:ArrayOfTurnOffs" />
+ <xs:element minOccurs="0" name="turnOns" type="tns:ArrayOfTurnOns" />
+ <xs:element minOccurs="0" name="tvShows" type="tns:ArrayOfTvShows" />
+ <xs:element minOccurs="0" name="updated" type="xs:dateTime"/>
+ <xs:element minOccurs="0" name="urls" type="tns:ArrayOfPersonUrl" />
+ <xs:element minOccurs="0" name="utcOffset" type="xs:int" />
+ </xs:all>
+ </xs:complexType>
+ <xs:element name="person" type="tns:person" />
+ <xs:element name="group" type="tns:group" />
+ <xs:complexType name="group">
+ <xs:all>
+ <xs:element minOccurs="0" name="id" type="xs:string" />
+ <xs:element minOccurs="0" name="title" type="xs:string" />
+ </xs:all>
+ </xs:complexType>
+ <xs:element name="appdataEntry" type="tns:appdataEntry" />
+ <xs:complexType name="appdataEntry">
+ <xs:all>
+ <xs:element minOccurs="1" name="key" type="xs:string" />
+ <xs:element minOccurs="1" name="value" type="xs:string" />
+ </xs:all>
+ </xs:complexType>
+ <xs:element name="appdata" type="tns:appdata" />
+ <xs:complexType name="appdata">
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" name="entry"
type="tns:appdataEntry" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ArrayOfgroup">
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" name="person"
type="tns:group" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="ArrayOfgroup" type="tns:ArrayOfgroup" />
+ <xs:complexType name="GroupCollection">
+ <xs:all>
+ <xs:element minOccurs="0" name="itemsPerPage" type="xs:int" />
+ <xs:element minOccurs="0" name="groups" type="tns:ArrayOfgroup" />
+ <xs:element minOccurs="0" name="startIndex" type="xs:long" />
+ <xs:element minOccurs="0" name="totalResults" type="xs:long" />
+ </xs:all>
+ </xs:complexType>
+ <xs:element name="GroupCollection" type="tns:GroupCollection" />
+ <xs:complexType name="ArrayOfActivities">
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" name="activity"
type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="ArrayOfActivities" type="tns:ArrayOfActivities" />
+ <xs:complexType name="BodyType">
+ <xs:all>
+ <xs:element minOccurs="0" name="build" type="xs:string" />
+ <xs:element minOccurs="0" name="eyeColor" type="xs:string" />
+ <xs:element minOccurs="0" name="hairColor" type="xs:string" />
+ <xs:element minOccurs="0" name="height" type="xs:double" />
+ <xs:element minOccurs="0" name="weight" type="xs:double" />
+ </xs:all>
+ </xs:complexType>
+ <xs:element name="BodyType" type="tns:BodyType" />
+ <xs:complexType name="ArrayOfBooks">
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" name="book"
type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="ArrayOfBooks" type="tns:ArrayOfBooks" />
+ <xs:complexType name="ArrayOfCars">
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" name="car"
type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="ArrayOfCars" type="tns:ArrayOfCars" />
+ <xs:complexType name="Address">
+ <xs:all>
+ <xs:element minOccurs="0" name="country" type="xs:string" />
+ <xs:element minOccurs="0" name="extendedAddress" type="xs:string" />
+ <xs:element minOccurs="0" name="latitude" type="xs:double" />
+ <xs:element minOccurs="0" name="locality" type="xs:string" />
+ <xs:element minOccurs="0" name="longitude" type="xs:double" />
+ <xs:element minOccurs="0" name="poBox" type="xs:string" />
+ <xs:element minOccurs="0" name="postalCode" type="xs:string" />
+ <xs:element minOccurs="0" name="primary" type="xs:boolean"/>
+ <xs:element minOccurs="0" name="region" type="xs:string" />
+ <xs:element minOccurs="0" name="streetAddress" type="xs:string" />
+ <xs:element minOccurs="0" name="type" type="xs:string" />
+ <xs:element minOccurs="0" name="formatted" type="xs:string" />
+ </xs:all>
+ </xs:complexType>
+ <xs:element name="Address" type="tns:Address" />
+ <xs:complexType name="Drinker">
+ <xs:all>
+ <xs:element minOccurs="0" name="displayvalue" type="xs:string" />
+ <xs:element minOccurs="0" name="key" type="tns:DrinkerType" />
+ </xs:all>
+ </xs:complexType>
+ <xs:element name="Drinker" type="tns:Drinker" />
+ <xs:simpleType name="DrinkerType">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="HEAVILY" />
+ <xs:enumeration value="NO" />
+ <xs:enumeration value="OCCASIONALLY" />
+ <xs:enumeration value="QUIT" />
+ <xs:enumeration value="QUITTING" />
+ <xs:enumeration value="REGULARLY" />
+ <xs:enumeration value="SOCIALLY" />
+ <xs:enumeration value="YES" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:element name="DrinkerType" type="tns:DrinkerType" />
+ <xs:complexType name="ArrayOfPersonUrl">
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" name="url"
type="tns:PluralPersonField" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="ArrayOfPersonUrl" type="tns:ArrayOfPersonUrl" />
+ <xs:complexType name="ArrayOfEmail">
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" name="email"
type="tns:PluralPersonField" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="ArrayOfEmail" type="tns:ArrayOfEmail" />
+ <xs:complexType name="PluralPersonField">
+ <xs:all>
+ <xs:element minOccurs="0" name="value" type="xs:string" />
+ <xs:element minOccurs="0" name="type" type="xs:string" />
+ <xs:element minOccurs="0" name="primary" type="xs:boolean"/>
+ </xs:all>
+ </xs:complexType>
+ <xs:complexType name="ArrayOfIm">
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" name="im"
type="tns:PluralPersonField" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="ArrayOfIm" type="tns:ArrayOfIm" />
+ <xs:complexType name="ArrayOfPhoto">
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" name="photo"
type="tns:PluralPersonField" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="ArrayOfPhoto" type="tns:ArrayOfPhoto" />
+ <xs:complexType name="ArrayOfRelationship">
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" name="relationship"
type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="ArrayOfRelationship" type="tns:ArrayOfRelationship" />
+ <xs:element name="account" type="tns:account" />
+ <xs:complexType name="ArrayOfAccount">
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" name="account"
type="tns:account" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="ArrayOfAccount" type="tns:ArrayOfAccount" />
+ <xs:complexType name="account">
+ <xs:all>
+ <xs:element minOccurs="0" name="domain" type="xs:string" />
+ <xs:element minOccurs="0" name="primary" type="xs:boolean"/>
+ <xs:element minOccurs="0" name="userid" type="xs:string" />
+ <xs:element minOccurs="0" name="username" type="xs:string" />
+ </xs:all>
+ </xs:complexType> <xs:complexType name="ArrayOfFoods">
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" name="food"
type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="ArrayOfFoods" type="tns:ArrayOfFoods" />
+ <xs:complexType name="ArrayOfHeroes">
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" name="hero"
type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="ArrayOfHeroes" type="tns:ArrayOfHeroes" />
+ <xs:complexType name="ArrayOfInterests">
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" name="interest"
type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="ArrayOfInterests" type="tns:ArrayOfInterests" />
+ <xs:complexType name="ArrayOfOrganization">
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" name="Organization"
type="tns:Organization" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="ArrayOfOrganization" type="tns:ArrayOfOrganization" />
+ <xs:complexType name="Organization">
+ <xs:all>
+ <xs:element minOccurs="0" name="department" type="xs:string" />
+ <xs:element minOccurs="0" name="description" type="xs:string" />
+ <xs:element minOccurs="0" name="endDate" type="xs:dateTime" />
+ <xs:element minOccurs="0" name="location" type="tns:Address" />
+ <xs:element minOccurs="0" name="name" type="xs:string" />
+ <xs:element minOccurs="0" name="startDate" type="xs:dateTime" />
+ <xs:element minOccurs="0" name="type" type="xs:string" />
+ <xs:element minOccurs="0" name="title" type="xs:string" />
+ </xs:all>
+ </xs:complexType>
+ <xs:element name="Organization" type="tns:Organization" />
+ <xs:complexType name="ArrayOfLanguages">
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" name="language"
type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="ArrayOfLanguages" type="tns:ArrayOfLanguages" />
+ <xs:complexType name="ArrayOfMovies">
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" name="movie"
type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="ArrayOfMovies" type="tns:ArrayOfMovies" />
+ <xs:complexType name="ArrayOfMusic">
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" name="music"
type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="ArrayOfMusic" type="tns:ArrayOfMusic" />
+ <xs:complexType name="name">
+ <xs:all>
+ <xs:element minOccurs="0" name="additionalName" type="xs:string" />
+ <xs:element minOccurs="0" name="familyName" type="xs:string" />
+ <xs:element minOccurs="0" name="givenName" type="xs:string" />
+ <xs:element minOccurs="0" name="honorificPrefix" type="xs:string" />
+ <xs:element minOccurs="0" name="formatted" type="xs:string" />
+ </xs:all>
+ </xs:complexType>
+ <xs:element name="name" type="tns:name" />
+ <xs:complexType name="Presence">
+ <xs:all>
+ <xs:element minOccurs="0" name="displayvalue" type="xs:string" />
+ <xs:element minOccurs="0" name="key" type="tns:PresenceType" />
+ </xs:all>
+ </xs:complexType>
+ <xs:element name="Presence" type="tns:Presence" />
+ <xs:simpleType name="PresenceType">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="AWAY" />
+ <xs:enumeration value="CHAT" />
+ <xs:enumeration value="DND" />
+ <xs:enumeration value="OFFLINE" />
+ <xs:enumeration value="ONLINE" />
+ <xs:enumeration value="XA" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:element name="PresenceType" type="tns:PresenceType" />
+ <xs:complexType name="ArrayOfPhone">
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" name="phone"
type="tns:PluralPersonField" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="ArrayOfPhone" type="tns:ArrayOfPhone" />
+ <xs:complexType name="Url">
+ <xs:all>
+ <xs:element minOccurs="0" name="address" type="xs:string" />
+ <xs:element minOccurs="0" name="linkText" type="xs:string" />
+ <xs:element minOccurs="0" name="type" type="xs:string" />
+ </xs:all>
+ </xs:complexType>
+ <xs:element name="Url" type="tns:Url" />
+ <xs:complexType name="ArrayOfQuotes">
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" name="quote"
type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="ArrayOfQuotes" type="tns:ArrayOfQuotes" />
+ <xs:complexType name="Smoker">
+ <xs:all>
+ <xs:element minOccurs="0" name="displayvalue" type="xs:string" />
+ <xs:element minOccurs="0" name="key" type="tns:SmokerType" />
+ </xs:all>
+ </xs:complexType>
+ <xs:element name="Smoker" type="tns:Smoker" />
+ <xs:simpleType name="SmokerType">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="HEAVILY" />
+ <xs:enumeration value="NO" />
+ <xs:enumeration value="OCCASIONALLY" />
+ <xs:enumeration value="QUIT" />
+ <xs:enumeration value="QUITTING" />
+ <xs:enumeration value="REGULARLY" />
+ <xs:enumeration value="SOCIALLY" />
+ <xs:enumeration value="YES" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:element name="SmokerType" type="tns:SmokerType" />
+ <xs:complexType name="ArrayOfSports">
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" name="sport"
type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="ArrayOfSports" type="tns:ArrayOfSports" />
+ <xs:complexType name="ArrayOfTags">
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" name="tag"
type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="ArrayOfTags" type="tns:ArrayOfTags" />
+ <xs:complexType name="ArrayOfTurnOffs">
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" name="turnOff"
type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="ArrayOfTurnOffs" type="tns:ArrayOfTurnOffs" />
+ <xs:complexType name="ArrayOfTurnOns">
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" name="turnOn"
type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="ArrayOfTurnOns" type="tns:ArrayOfTurnOns" />
+ <xs:complexType name="ArrayOfTvShows">
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" name="tvShow"
type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="ArrayOfTvShows" type="tns:ArrayOfTvShows" />
+ <xs:complexType name="ArrayOfUrl">
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" name="Url"
type="tns:Url" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="ArrayOfUrl" type="tns:ArrayOfUrl" />
+ <xs:complexType name="UrlCollection">
+ <xs:all>
+ <xs:element minOccurs="0" name="itemsPerPage" type="xs:int" />
+ <xs:element minOccurs="0" name="startIndex" type="xs:long" />
+ <xs:element minOccurs="0" name="totalResults" type="xs:long" />
+ <xs:element minOccurs="0" name="urls" type="tns:ArrayOfUrl" />
+ </xs:all>
+ </xs:complexType>
+ <xs:element name="UrlCollection" type="tns:UrlCollection" />
+ <xs:complexType name="CreateActivityPriority">
+ <xs:all>
+ <xs:element minOccurs="0" name="displayvalue" type="xs:string" />
+ <xs:element minOccurs="0" name="key"
type="tns:CreateActivityPriorityType" />
+ </xs:all>
+ </xs:complexType>
+ <xs:element name="CreateActivityPriority" type="tns:CreateActivityPriority"
/>
+ <xs:simpleType name="CreateActivityPriorityType">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="HIGH" />
+ <xs:enumeration value="LOW" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:element name="CreateActivityPriorityType"
type="tns:CreateActivityPriorityType" />
+ <xs:complexType name="EscapeType">
+ <xs:all>
+ <xs:element minOccurs="0" name="displayvalue" type="xs:string" />
+ <xs:element minOccurs="0" name="key" type="tns:EscapeTypeType" />
+ </xs:all>
+ </xs:complexType>
+ <xs:element name="EscapeType" type="tns:EscapeType" />
+ <xs:simpleType name="EscapeTypeType">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="HTML_ESCAPE" />
+ <xs:enumeration value="NONE" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:element name="EscapeTypeType" type="tns:EscapeTypeType" />
+ <xs:complexType name="PhoneCollection">
+ <xs:all>
+ <xs:element minOccurs="0" name="itemsPerPage" type="xs:int" />
+ <xs:element minOccurs="0" name="phones" type="tns:ArrayOfPhone" />
+ <xs:element minOccurs="0" name="startIndex" type="xs:long" />
+ <xs:element minOccurs="0" name="totalResults" type="xs:long" />
+ </xs:all>
+ </xs:complexType>
+ <xs:element name="PhoneCollection" type="tns:PhoneCollection" />
+ <xs:complexType name="EmailCollection">
+ <xs:all>
+ <xs:element minOccurs="0" name="emails" type="tns:ArrayOfEmail" />
+ <xs:element minOccurs="0" name="itemsPerPage" type="xs:int" />
+ <xs:element minOccurs="0" name="startIndex" type="xs:long" />
+ <xs:element minOccurs="0" name="totalResults" type="xs:long" />
+ </xs:all>
+ </xs:complexType>
+ <xs:element name="EmailCollection" type="tns:EmailCollection" />
+ <xs:complexType name="Message">
+ <xs:all>
+ <xs:element minOccurs="0" name="body" type="xs:string" />
+ <xs:element minOccurs="0" name="bodyId" type="xs:string" />
+ <xs:element minOccurs="0" name="title" type="xs:string" />
+ <xs:element minOccurs="0" name="titleId" type="xs:string" />
+ </xs:all>
+ </xs:complexType>
+ <xs:element name="Message" type="tns:Message" />
+ <xs:complexType name="MediaItemCollection">
+ <xs:all>
+ <xs:element minOccurs="0" name="itemsPerPage" type="xs:int" />
+ <xs:element minOccurs="0" name="mediaItems" type="tns:ArrayOfMediaItem"
/>
+ <xs:element minOccurs="0" name="startIndex" type="xs:long" />
+ <xs:element minOccurs="0" name="totalResults" type="xs:long" />
+ </xs:all>
+ </xs:complexType>
+ <xs:element name="MediaItemCollection" type="tns:MediaItemCollection" />
+ <xs:simpleType name="EnvironmentType">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="ACTIVITY" />
+ <xs:enumeration value="ADDRESS" />
+ <xs:enumeration value="BODY_TYPE" />
+ <xs:enumeration value="EMAIL" />
+ <xs:enumeration value="FILTER_TYPE" />
+ <xs:enumeration value="MEDIAITEM" />
+ <xs:enumeration value="MESSAGE" />
+ <xs:enumeration value="MESSAGE_TYPE" />
+ <xs:enumeration value="NAME" />
+ <xs:enumeration value="ORGANIZATION" />
+ <xs:enumeration value="PERSON" />
+ <xs:enumeration value="PHONE" />
+ <xs:enumeration value="SORTORDER" />
+ <xs:enumeration value="URL" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:element name="EnvironmentType" type="tns:EnvironmentType" />
+ <xs:complexType name="MessageType">
+ <xs:all>
+ <xs:element minOccurs="0" name="displayvalue" type="xs:string" />
+ <xs:element minOccurs="0" name="key" type="tns:MessageTypeType" />
+ </xs:all>
+ </xs:complexType>
+ <xs:element name="MessageType" type="tns:MessageType" />
+ <xs:simpleType name="MessageTypeType">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="EMAIL" />
+ <xs:enumeration value="NOTIFICATION" />
+ <xs:enumeration value="PRIVATE_MESSAGE" />
+ <xs:enumeration value="PUBLIC_MESSAGE" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:element name="MessageTypeType" type="tns:MessageTypeType" />
+ <xs:simpleType name="LookingForType">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="ACTIVITY_PARTNERS" />
+ <xs:enumeration value="DATING" />
+ <xs:enumeration value="FRIENDS" />
+ <xs:enumeration value="NETWORKING" />
+ <xs:enumeration value="RANDOM" />
+ <xs:enumeration value="RELATIONSHIP" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:element name="LookingForType" type="tns:LookingForType" />
+ <xs:complexType name="Container">
+ <xs:all />
+ </xs:complexType>
+ <xs:element name="Container" type="tns:Container" />
+ <xs:complexType name="Environment">
+ <xs:all>
+ <xs:element minOccurs="0" name="displayvalue" type="xs:string" />
+ <xs:element minOccurs="0" name="key" type="tns:EnvironmentType" />
+ </xs:all>
+ </xs:complexType>
+ <xs:element name="Environment" type="tns:Environment" />
+ <xs:complexType name="AddressCollection">
+ <xs:all>
+ <xs:element minOccurs="0" name="addresses" type="tns:ArrayOfAddress" />
+ <xs:element minOccurs="0" name="itemsPerPage" type="xs:int" />
+ <xs:element minOccurs="0" name="startIndex" type="xs:long" />
+ <xs:element minOccurs="0" name="totalResults" type="xs:long" />
+ </xs:all>
+ </xs:complexType>
+ <xs:element name="AddressCollection" type="tns:AddressCollection" />
+ <xs:complexType name="ArrayOfAddress">
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" name="Address"
type="tns:Address" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="ArrayOfAddress" type="tns:ArrayOfAddress" />
+ <xs:complexType name="PersonCollection">
+ <xs:all>
+ <xs:element minOccurs="0" name="itemsPerPage" type="xs:int" />
+ <xs:element minOccurs="0" name="people" type="tns:ArrayOfperson" />
+ <xs:element minOccurs="0" name="startIndex" type="xs:long" />
+ <xs:element minOccurs="0" name="totalResults" type="xs:long" />
+ </xs:all>
+ </xs:complexType>
+ <xs:element name="PersonCollection" type="tns:PersonCollection" />
+ <xs:complexType name="ArrayOfperson">
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" name="person"
type="tns:person" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="ArrayOfperson" type="tns:ArrayOfperson" />
+ <xs:complexType name="OrganizationCollection">
+ <xs:all>
+ <xs:element minOccurs="0" name="itemsPerPage" type="xs:int" />
+ <xs:element minOccurs="0" name="organizations"
type="tns:ArrayOfOrganization" />
+ <xs:element minOccurs="0" name="startIndex" type="xs:long" />
+ <xs:element minOccurs="0" name="totalResults" type="xs:long" />
+ </xs:all>
+ </xs:complexType>
+ <xs:element name="OrganizationCollection" type="tns:OrganizationCollection"
/>
+ <xs:complexType name="LookingFor">
+ <xs:all>
+ <xs:element minOccurs="0" name="displayvalue" type="xs:string" />
+ <xs:element minOccurs="0" name="key" type="tns:LookingForType" />
+ </xs:all>
+ </xs:complexType>
+ <xs:element name="LookingFor" type="tns:LookingFor" />
+</xs:schema>
Added:
incubator/shindig/trunk/java/social-api/src/test/resources/org/apache/shindig/social/opensocial/util/testschema1.xml
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/resources/org/apache/shindig/social/opensocial/util/testschema1.xml?rev=702503&view=auto
==============================================================================
---
incubator/shindig/trunk/java/social-api/src/test/resources/org/apache/shindig/social/opensocial/util/testschema1.xml
(added)
+++
incubator/shindig/trunk/java/social-api/src/test/resources/org/apache/shindig/social/opensocial/util/testschema1.xml
Tue Oct 7 07:59:54 2008
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<person xmlns="http://ns.opensocial.org/2008/opensocial"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://ns.opensocial.org/2008/opensocial
classpath:opensocial.xsd">
+ <aboutMe></aboutMe>
+ <accounts>
+ <domain>Domain</domain>
+ <primary>true</primary>
+ <userid>useid</userid>
+ <username>username</username>
+ </accounts>
+ <activities>
+ <activity>Activity1</activity>
+ </activities>
+ <anniversary>2001-10-26T21:32:52</anniversary>
+ <birthday>2001-10-26T21:32:52</birthday>
+ <bodyType></bodyType>
+ <books></books>
+ <cars></cars>
+ <children></children>
+ <connected></connected>
+ <currentLocation></currentLocation>
+ <displayName></displayName>
+ <drinker></drinker>
+ <emails></emails>
+ <ethnicity></ethnicity>
+ <fashion></fashion>
+ <food></food>
+ <gender></gender>
+ <happiestWhen></happiestWhen>
+ <hasApp>false</hasApp>
+ <heroes></heroes>
+ <humor></humor>
+ <id></id>
+ <ims></ims>
+ <interests></interests>
+ <jobInterests></jobInterests>
+ <languagesSpoken></languagesSpoken>
+ <livingArrangement></livingArrangement>
+ <lookingFor></lookingFor>
+ <movies></movies>
+ <music></music>
+ <name></name>
+ <nickname></nickname>
+ <organizations></organizations>
+ <pets></pets>
+ <phoneNumbers></phoneNumbers>
+ <photos></photos>
+ <politicalViews></politicalViews>
+ <preferredUsername></preferredUsername>
+ <profileSong></profileSong>
+ <profileUrl></profileUrl>
+ <profileVideo></profileVideo>
+ <published>2001-10-26T21:32:52</published>
+ <quotes></quotes>
+ <relationshipStatus></relationshipStatus>
+</person>
+
\ No newline at end of file
Added:
incubator/shindig/trunk/java/social-api/src/test/resources/org/apache/shindig/social/opensocial/util/testschema1bad.xml
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/resources/org/apache/shindig/social/opensocial/util/testschema1bad.xml?rev=702503&view=auto
==============================================================================
---
incubator/shindig/trunk/java/social-api/src/test/resources/org/apache/shindig/social/opensocial/util/testschema1bad.xml
(added)
+++
incubator/shindig/trunk/java/social-api/src/test/resources/org/apache/shindig/social/opensocial/util/testschema1bad.xml
Tue Oct 7 07:59:54 2008
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<person xmlns="http://ns.opensocial.org/2008/opensocial"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://ns.opensocial.org/2008/opensocial
classpath:opensocial.xsd">
+ <aboutMe></aboutMe>
+ <accounts>
+ <!-- ???? accounts is plural but there is only 1 according to the xsd -->
+ <domain>Domain</domain>
+ <primary>true</primary>
+ <userid>useid</userid>
+ <username>username</username>
+ </accounts>
+ <activities>
+ <activity>Activity1</activity>
+ </activities>
+ <anniversary>INTENTIONAL INVALID DATE</anniversary>
+ <birthday>2001-10-26T21:32:52</birthday>
+ <bodyType></bodyType>
+ <books></books>
+ <cars></cars>
+ <children></children>
+ <connected></connected>
+ <currentLocation></currentLocation>
+ <displayName></displayName>
+ <drinker></drinker>
+ <emails></emails>
+ <ethnicity></ethnicity>
+ <fashion></fashion>
+ <food></food>
+ <gender></gender>
+ <happiestWhen></happiestWhen>
+ <hasApp>false</hasApp>
+ <heroes></heroes>
+ <humor></humor>
+ <id></id>
+ <ims></ims>
+ <interests></interests>
+ <jobInterests></jobInterests>
+ <languagesSpoken></languagesSpoken>
+ <livingArrangement></livingArrangement>
+ <lookingFor></lookingFor>
+ <movies></movies>
+ <music></music>
+ <name></name>
+ <nickname></nickname>
+ <organizations></organizations>
+ <pets></pets>
+ <phoneNumbers></phoneNumbers>
+ <photos></photos>
+ <politicalViews></politicalViews>
+ <preferredUsername></preferredUsername>
+ <profileSong></profileSong>
+ <profileUrl></profileUrl>
+ <profileVideo></profileVideo>
+ <published>2001-10-26T21:32:52</published>
+ <quotes></quotes>
+ <relationshipStatus></relationshipStatus>
+</person>
+
\ No newline at end of file