You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wink.apache.org by bl...@apache.org on 2010/04/30 19:37:29 UTC
svn commit: r939752 [1/2] - in /incubator/wink/trunk:
wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/json/
wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/xml/
wink-providers/wink-jackson-provider/...
Author: bluk
Date: Fri Apr 30 17:37:29 2010
New Revision: 939752
URL: http://svn.apache.org/viewvc?rev=939752&view=rev
Log:
Fix some line ending corrections
Modified:
incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/json/JAXBArrayJSONProvider.java
incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/xml/JAXBArrayXmlProvider.java
incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/xml/JAXBCollectionXmlProvider.java
incubator/wink/trunk/wink-providers/wink-jackson-provider/src/test/java/org/apache/wink/providers/jackson/internal/JAXBCollectionJSONTest.java
incubator/wink/trunk/wink-server/src/test/java/org/apache/wink/server/internal/UriBuilderTest.java
Modified: incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/json/JAXBArrayJSONProvider.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/json/JAXBArrayJSONProvider.java?rev=939752&r1=939751&r2=939752&view=diff
==============================================================================
--- incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/json/JAXBArrayJSONProvider.java (original)
+++ incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/json/JAXBArrayJSONProvider.java Fri Apr 30 17:37:29 2010
@@ -1,199 +1,199 @@
-/*******************************************************************************
- * 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.wink.common.internal.providers.entity.json;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Array;
-import java.lang.reflect.Type;
-import java.util.ArrayList;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Queue;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.Produces;
-import javax.ws.rs.WebApplicationException;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.MultivaluedMap;
-import javax.ws.rs.ext.MessageBodyReader;
-import javax.ws.rs.ext.MessageBodyWriter;
-import javax.ws.rs.ext.Provider;
-import javax.ws.rs.ext.Providers;
-
-import org.apache.wink.common.internal.providers.entity.xml.AbstractJAXBCollectionProvider;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-@Provider
-@Consumes(MediaType.APPLICATION_JSON)
-@Produces(MediaType.APPLICATION_JSON)
-public class JAXBArrayJSONProvider extends AbstractJAXBCollectionProvider implements
- MessageBodyReader<Object[]>, MessageBodyWriter<Object[]> {
-
- protected volatile MessageBodyReader<Object> readerProvider = null;
- protected volatile MessageBodyWriter<Object> writerProvider = null;
-
- private static final Logger logger = LoggerFactory.getLogger(JAXBArrayJSONProvider.class);
-
- @Context
- Providers injectedProviders;
-
- public boolean isReadable(Class<?> type,
- Type genericType,
- Annotation[] annotations,
- MediaType mediaType) {
- Class<?> theType = getParameterizedTypeClass(type, genericType, false);
- if (theType != null)
- return (type.isArray() && isJAXBObject(theType, genericType) && !isJAXBElement(theType,
- genericType));
- return false;
- }
-
- public long getSize(Object[] t,
- Class<?> type,
- Type genericType,
- Annotation[] annotations,
- MediaType mediaType) {
- return -1;
- }
-
- @SuppressWarnings("unchecked")
- public Object[] readFrom(Class<Object[]> type,
- Type genericType,
- Annotation[] annotations,
- MediaType mediaType,
- MultivaluedMap<String, String> httpHeaders,
- InputStream entityStream) throws IOException, WebApplicationException {
- Class<?> theType = getParameterizedTypeClass(type, genericType, false);
- if (this.readerProvider == null) {
- this.readerProvider =
- injectedProviders.getMessageBodyReader((Class<Object>)theType,
- theType,
- annotations,
- mediaType);
- logger.debug("readerProvider was {} of type {}", System.identityHashCode(readerProvider), readerProvider.getClass().getName()); //$NON-NLS-1$
- }
- Queue<String> queue = new LinkedList<String>();
- List<Object> collection = new ArrayList<Object>();
- Pattern p = Pattern.compile("\\S"); //$NON-NLS-1$
- Matcher m = null;
- int next = entityStream.read();
- while (next != -1) {
- m = p.matcher("" + (char)next); //$NON-NLS-1$
- if (m.matches() && (char)next != '[')
- throw new WebApplicationException(500);
- else if (!m.matches())
- next = (char)entityStream.read();
- else {
- // we found the first non-whitespace character is '['. Read the
- // next character and begin parsing
- next = entityStream.read();
- break;
- }
- }
-
- // parse the content and deserialize the JSON Object one by one
- String objectString = ""; //$NON-NLS-1$
- while (next != -1) {
- if (((char)next != ',') || ((char)next == ',' && !queue.isEmpty()))
- objectString += (char)next;
- if ((char)next == '{')
- queue.offer("" + (char)next); //$NON-NLS-1$
- else if ((char)next == '}') {
- queue.poll();
- if (queue.isEmpty()) {
- collection.add(this.readerProvider
- .readFrom((Class<Object>)theType,
- theType,
- annotations,
- mediaType,
- httpHeaders,
- new ByteArrayInputStream(objectString.getBytes())));
- objectString = ""; //$NON-NLS-1$
- }
- }
- next = entityStream.read();
- }
- return (Object[])getArray(theType, collection);
- }
-
- @SuppressWarnings("unchecked")
- protected static <T> Object getArray(Class<T> type, List<?> collection) {
- T[] ret = (T[])Array.newInstance(type, collection.size());
- int i = 0;
- for (Object o : collection) {
- ret[i++] = (T)o;
- }
- return ret;
- }
-
- @SuppressWarnings("unchecked")
- public void writeTo(Object[] t,
- Class<?> type,
- Type genericType,
- Annotation[] annotations,
- MediaType mediaType,
- MultivaluedMap<String, Object> httpHeaders,
- OutputStream entityStream) throws IOException, WebApplicationException {
- Class<?> theType = getParameterizedTypeClass(type, genericType, false);
- if (this.writerProvider == null) {
- this.writerProvider =
- injectedProviders.getMessageBodyWriter((Class<Object>)theType,
- theType,
- annotations,
- mediaType);
- logger.debug("writerProvider was {} of type {}", System.identityHashCode(writerProvider), writerProvider.getClass().getName()); //$NON-NLS-1$
- }
- entityStream.write("[".getBytes()); //$NON-NLS-1$
- int i = 0;
- for (Object o : t) {
- this.writerProvider.writeTo(o,
- theType,
- theType,
- annotations,
- mediaType,
- httpHeaders,
- entityStream);
- if ((++i) != t.length)
- entityStream.write(",".getBytes()); //$NON-NLS-1$
- }
- entityStream.write("]".getBytes()); //$NON-NLS-1$
- }
-
- public boolean isWriteable(Class<?> type,
- Type genericType,
- Annotation[] annotations,
- MediaType mediaType) {
- Class<?> theType = getParameterizedTypeClass(type, genericType, false);
-
- if (theType != null)
- return (isJAXBObject(theType, genericType) && !isJAXBElement(theType, genericType));
- return false;
- }
-
-}
+/*******************************************************************************
+ * 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.wink.common.internal.providers.entity.json;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Array;
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Queue;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.Produces;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.ext.MessageBodyReader;
+import javax.ws.rs.ext.MessageBodyWriter;
+import javax.ws.rs.ext.Provider;
+import javax.ws.rs.ext.Providers;
+
+import org.apache.wink.common.internal.providers.entity.xml.AbstractJAXBCollectionProvider;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@Provider
+@Consumes(MediaType.APPLICATION_JSON)
+@Produces(MediaType.APPLICATION_JSON)
+public class JAXBArrayJSONProvider extends AbstractJAXBCollectionProvider implements
+ MessageBodyReader<Object[]>, MessageBodyWriter<Object[]> {
+
+ protected volatile MessageBodyReader<Object> readerProvider = null;
+ protected volatile MessageBodyWriter<Object> writerProvider = null;
+
+ private static final Logger logger = LoggerFactory.getLogger(JAXBArrayJSONProvider.class);
+
+ @Context
+ Providers injectedProviders;
+
+ public boolean isReadable(Class<?> type,
+ Type genericType,
+ Annotation[] annotations,
+ MediaType mediaType) {
+ Class<?> theType = getParameterizedTypeClass(type, genericType, false);
+ if (theType != null)
+ return (type.isArray() && isJAXBObject(theType, genericType) && !isJAXBElement(theType,
+ genericType));
+ return false;
+ }
+
+ public long getSize(Object[] t,
+ Class<?> type,
+ Type genericType,
+ Annotation[] annotations,
+ MediaType mediaType) {
+ return -1;
+ }
+
+ @SuppressWarnings("unchecked")
+ public Object[] readFrom(Class<Object[]> type,
+ Type genericType,
+ Annotation[] annotations,
+ MediaType mediaType,
+ MultivaluedMap<String, String> httpHeaders,
+ InputStream entityStream) throws IOException, WebApplicationException {
+ Class<?> theType = getParameterizedTypeClass(type, genericType, false);
+ if (this.readerProvider == null) {
+ this.readerProvider =
+ injectedProviders.getMessageBodyReader((Class<Object>)theType,
+ theType,
+ annotations,
+ mediaType);
+ logger.debug("readerProvider was {} of type {}", System.identityHashCode(readerProvider), readerProvider.getClass().getName()); //$NON-NLS-1$
+ }
+ Queue<String> queue = new LinkedList<String>();
+ List<Object> collection = new ArrayList<Object>();
+ Pattern p = Pattern.compile("\\S"); //$NON-NLS-1$
+ Matcher m = null;
+ int next = entityStream.read();
+ while (next != -1) {
+ m = p.matcher("" + (char)next); //$NON-NLS-1$
+ if (m.matches() && (char)next != '[')
+ throw new WebApplicationException(500);
+ else if (!m.matches())
+ next = (char)entityStream.read();
+ else {
+ // we found the first non-whitespace character is '['. Read the
+ // next character and begin parsing
+ next = entityStream.read();
+ break;
+ }
+ }
+
+ // parse the content and deserialize the JSON Object one by one
+ String objectString = ""; //$NON-NLS-1$
+ while (next != -1) {
+ if (((char)next != ',') || ((char)next == ',' && !queue.isEmpty()))
+ objectString += (char)next;
+ if ((char)next == '{')
+ queue.offer("" + (char)next); //$NON-NLS-1$
+ else if ((char)next == '}') {
+ queue.poll();
+ if (queue.isEmpty()) {
+ collection.add(this.readerProvider
+ .readFrom((Class<Object>)theType,
+ theType,
+ annotations,
+ mediaType,
+ httpHeaders,
+ new ByteArrayInputStream(objectString.getBytes())));
+ objectString = ""; //$NON-NLS-1$
+ }
+ }
+ next = entityStream.read();
+ }
+ return (Object[])getArray(theType, collection);
+ }
+
+ @SuppressWarnings("unchecked")
+ protected static <T> Object getArray(Class<T> type, List<?> collection) {
+ T[] ret = (T[])Array.newInstance(type, collection.size());
+ int i = 0;
+ for (Object o : collection) {
+ ret[i++] = (T)o;
+ }
+ return ret;
+ }
+
+ @SuppressWarnings("unchecked")
+ public void writeTo(Object[] t,
+ Class<?> type,
+ Type genericType,
+ Annotation[] annotations,
+ MediaType mediaType,
+ MultivaluedMap<String, Object> httpHeaders,
+ OutputStream entityStream) throws IOException, WebApplicationException {
+ Class<?> theType = getParameterizedTypeClass(type, genericType, false);
+ if (this.writerProvider == null) {
+ this.writerProvider =
+ injectedProviders.getMessageBodyWriter((Class<Object>)theType,
+ theType,
+ annotations,
+ mediaType);
+ logger.debug("writerProvider was {} of type {}", System.identityHashCode(writerProvider), writerProvider.getClass().getName()); //$NON-NLS-1$
+ }
+ entityStream.write("[".getBytes()); //$NON-NLS-1$
+ int i = 0;
+ for (Object o : t) {
+ this.writerProvider.writeTo(o,
+ theType,
+ theType,
+ annotations,
+ mediaType,
+ httpHeaders,
+ entityStream);
+ if ((++i) != t.length)
+ entityStream.write(",".getBytes()); //$NON-NLS-1$
+ }
+ entityStream.write("]".getBytes()); //$NON-NLS-1$
+ }
+
+ public boolean isWriteable(Class<?> type,
+ Type genericType,
+ Annotation[] annotations,
+ MediaType mediaType) {
+ Class<?> theType = getParameterizedTypeClass(type, genericType, false);
+
+ if (theType != null)
+ return (isJAXBObject(theType, genericType) && !isJAXBElement(theType, genericType));
+ return false;
+ }
+
+}
Modified: incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/xml/JAXBArrayXmlProvider.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/xml/JAXBArrayXmlProvider.java?rev=939752&r1=939751&r2=939752&view=diff
==============================================================================
--- incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/xml/JAXBArrayXmlProvider.java (original)
+++ incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/xml/JAXBArrayXmlProvider.java Fri Apr 30 17:37:29 2010
@@ -1,98 +1,98 @@
-/*******************************************************************************
- * 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.wink.common.internal.providers.entity.xml;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Type;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.Produces;
-import javax.ws.rs.WebApplicationException;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.MultivaluedMap;
-import javax.ws.rs.ext.MessageBodyReader;
-import javax.ws.rs.ext.MessageBodyWriter;
-import javax.ws.rs.ext.Provider;
-
-@Provider
-@Consumes( {MediaType.TEXT_XML, MediaType.APPLICATION_XML, MediaType.WILDCARD})
-@Produces( {MediaType.TEXT_XML, MediaType.APPLICATION_XML, MediaType.WILDCARD})
-public class JAXBArrayXmlProvider extends AbstractJAXBCollectionProvider implements
- MessageBodyReader<Object[]>, MessageBodyWriter<Object[]> {
-
- public boolean isReadable(Class<?> type,
- Type genericType,
- Annotation[] annotations,
- MediaType mediaType) {
- Class<?> theType = getParameterizedTypeClass(type, genericType, false);
- if (theType != null)
- return (isSupportedMediaType(mediaType) && isJAXBObject(theType, genericType) && !isJAXBElement(theType,
- genericType));
- return false;
- }
-
- public Object[] readFrom(Class<Object[]> type,
- Type genericType,
- Annotation[] annotations,
- MediaType mediaType,
- MultivaluedMap<String, String> httpHeaders,
- InputStream entityStream) throws IOException, WebApplicationException {
- return (Object[])super.read(type,
- genericType,
- annotations,
- mediaType,
- httpHeaders,
- entityStream);
- }
-
- public long getSize(Object[] t,
- Class<?> type,
- Type genericType,
- Annotation[] annotations,
- MediaType mediaType) {
- return -1;
- }
-
- public boolean isWriteable(Class<?> type,
- Type genericType,
- Annotation[] annotations,
- MediaType mediaType) {
- Class<?> theType = getParameterizedTypeClass(type, genericType, false);
- if (theType != null)
- return (isSupportedMediaType(mediaType) && isJAXBObject(theType, genericType) && !isJAXBElement(theType,
- genericType));
- return false;
- }
-
- public void writeTo(Object[] t,
- Class<?> type,
- Type genericType,
- Annotation[] annotations,
- MediaType mediaType,
- MultivaluedMap<String, Object> httpHeaders,
- OutputStream entityStream) throws IOException, WebApplicationException {
- super.write(t, type, genericType, annotations, mediaType, httpHeaders, entityStream);
- }
-
-}
+/*******************************************************************************
+ * 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.wink.common.internal.providers.entity.xml;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.Produces;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.ext.MessageBodyReader;
+import javax.ws.rs.ext.MessageBodyWriter;
+import javax.ws.rs.ext.Provider;
+
+@Provider
+@Consumes( {MediaType.TEXT_XML, MediaType.APPLICATION_XML, MediaType.WILDCARD})
+@Produces( {MediaType.TEXT_XML, MediaType.APPLICATION_XML, MediaType.WILDCARD})
+public class JAXBArrayXmlProvider extends AbstractJAXBCollectionProvider implements
+ MessageBodyReader<Object[]>, MessageBodyWriter<Object[]> {
+
+ public boolean isReadable(Class<?> type,
+ Type genericType,
+ Annotation[] annotations,
+ MediaType mediaType) {
+ Class<?> theType = getParameterizedTypeClass(type, genericType, false);
+ if (theType != null)
+ return (isSupportedMediaType(mediaType) && isJAXBObject(theType, genericType) && !isJAXBElement(theType,
+ genericType));
+ return false;
+ }
+
+ public Object[] readFrom(Class<Object[]> type,
+ Type genericType,
+ Annotation[] annotations,
+ MediaType mediaType,
+ MultivaluedMap<String, String> httpHeaders,
+ InputStream entityStream) throws IOException, WebApplicationException {
+ return (Object[])super.read(type,
+ genericType,
+ annotations,
+ mediaType,
+ httpHeaders,
+ entityStream);
+ }
+
+ public long getSize(Object[] t,
+ Class<?> type,
+ Type genericType,
+ Annotation[] annotations,
+ MediaType mediaType) {
+ return -1;
+ }
+
+ public boolean isWriteable(Class<?> type,
+ Type genericType,
+ Annotation[] annotations,
+ MediaType mediaType) {
+ Class<?> theType = getParameterizedTypeClass(type, genericType, false);
+ if (theType != null)
+ return (isSupportedMediaType(mediaType) && isJAXBObject(theType, genericType) && !isJAXBElement(theType,
+ genericType));
+ return false;
+ }
+
+ public void writeTo(Object[] t,
+ Class<?> type,
+ Type genericType,
+ Annotation[] annotations,
+ MediaType mediaType,
+ MultivaluedMap<String, Object> httpHeaders,
+ OutputStream entityStream) throws IOException, WebApplicationException {
+ super.write(t, type, genericType, annotations, mediaType, httpHeaders, entityStream);
+ }
+
+}
Modified: incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/xml/JAXBCollectionXmlProvider.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/xml/JAXBCollectionXmlProvider.java?rev=939752&r1=939751&r2=939752&view=diff
==============================================================================
--- incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/xml/JAXBCollectionXmlProvider.java (original)
+++ incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/xml/JAXBCollectionXmlProvider.java Fri Apr 30 17:37:29 2010
@@ -1,93 +1,93 @@
-/*******************************************************************************
- * 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.wink.common.internal.providers.entity.xml;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Type;
-import java.util.Collection;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.Produces;
-import javax.ws.rs.WebApplicationException;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.MultivaluedMap;
-import javax.ws.rs.ext.MessageBodyReader;
-import javax.ws.rs.ext.MessageBodyWriter;
-import javax.ws.rs.ext.Provider;
-
-@Provider
-@Consumes( {MediaType.TEXT_XML, MediaType.APPLICATION_XML, MediaType.WILDCARD})
-@Produces( {MediaType.TEXT_XML, MediaType.APPLICATION_XML, MediaType.WILDCARD})
-public class JAXBCollectionXmlProvider extends AbstractJAXBCollectionProvider implements
- MessageBodyReader<Object>, MessageBodyWriter<Object> {
-
- public boolean isReadable(Class<?> type,
- Type genericType,
- Annotation[] annotations,
- MediaType mediaType) {
- Class<?> theType = getParameterizedTypeClass(type, genericType, false);
- if (theType != null)
- return (Collection.class.isAssignableFrom(type) && isSupportedMediaType(mediaType) && (isJAXBObject(theType, genericType) || (isJAXBElement(theType,
- genericType))));
- return false;
- }
-
- public Object readFrom(Class<Object> type,
- Type genericType,
- Annotation[] annotations,
- MediaType mediaType,
- MultivaluedMap<String, String> httpHeaders,
- InputStream entityStream) throws IOException, WebApplicationException {
- return super.read(type, genericType, annotations, mediaType, httpHeaders, entityStream);
- }
-
- public long getSize(Object t,
- Class<?> type,
- Type genericType,
- Annotation[] annotations,
- MediaType mediaType) {
- return -1;
- }
-
- public boolean isWriteable(Class<?> type,
- Type genericType,
- Annotation[] annotations,
- MediaType mediaType) {
- Class<?> theType = getParameterizedTypeClass(type, genericType, false);
- if (theType != null)
- return (Collection.class.isAssignableFrom(type) && isSupportedMediaType(mediaType) && (isJAXBObject(theType, genericType) || (isJAXBElement(theType,
- genericType))));
- return false;
- }
-
- public void writeTo(Object t,
- Class<?> type,
- Type genericType,
- Annotation[] annotations,
- MediaType mediaType,
- MultivaluedMap<String, Object> httpHeaders,
- OutputStream entityStream) throws IOException, WebApplicationException {
- super.write(t, type, genericType, annotations, mediaType, httpHeaders, entityStream);
- }
-}
+/*******************************************************************************
+ * 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.wink.common.internal.providers.entity.xml;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+import java.util.Collection;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.Produces;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.ext.MessageBodyReader;
+import javax.ws.rs.ext.MessageBodyWriter;
+import javax.ws.rs.ext.Provider;
+
+@Provider
+@Consumes( {MediaType.TEXT_XML, MediaType.APPLICATION_XML, MediaType.WILDCARD})
+@Produces( {MediaType.TEXT_XML, MediaType.APPLICATION_XML, MediaType.WILDCARD})
+public class JAXBCollectionXmlProvider extends AbstractJAXBCollectionProvider implements
+ MessageBodyReader<Object>, MessageBodyWriter<Object> {
+
+ public boolean isReadable(Class<?> type,
+ Type genericType,
+ Annotation[] annotations,
+ MediaType mediaType) {
+ Class<?> theType = getParameterizedTypeClass(type, genericType, false);
+ if (theType != null)
+ return (Collection.class.isAssignableFrom(type) && isSupportedMediaType(mediaType) && (isJAXBObject(theType, genericType) || (isJAXBElement(theType,
+ genericType))));
+ return false;
+ }
+
+ public Object readFrom(Class<Object> type,
+ Type genericType,
+ Annotation[] annotations,
+ MediaType mediaType,
+ MultivaluedMap<String, String> httpHeaders,
+ InputStream entityStream) throws IOException, WebApplicationException {
+ return super.read(type, genericType, annotations, mediaType, httpHeaders, entityStream);
+ }
+
+ public long getSize(Object t,
+ Class<?> type,
+ Type genericType,
+ Annotation[] annotations,
+ MediaType mediaType) {
+ return -1;
+ }
+
+ public boolean isWriteable(Class<?> type,
+ Type genericType,
+ Annotation[] annotations,
+ MediaType mediaType) {
+ Class<?> theType = getParameterizedTypeClass(type, genericType, false);
+ if (theType != null)
+ return (Collection.class.isAssignableFrom(type) && isSupportedMediaType(mediaType) && (isJAXBObject(theType, genericType) || (isJAXBElement(theType,
+ genericType))));
+ return false;
+ }
+
+ public void writeTo(Object t,
+ Class<?> type,
+ Type genericType,
+ Annotation[] annotations,
+ MediaType mediaType,
+ MultivaluedMap<String, Object> httpHeaders,
+ OutputStream entityStream) throws IOException, WebApplicationException {
+ super.write(t, type, genericType, annotations, mediaType, httpHeaders, entityStream);
+ }
+}
Modified: incubator/wink/trunk/wink-providers/wink-jackson-provider/src/test/java/org/apache/wink/providers/jackson/internal/JAXBCollectionJSONTest.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-providers/wink-jackson-provider/src/test/java/org/apache/wink/providers/jackson/internal/JAXBCollectionJSONTest.java?rev=939752&r1=939751&r2=939752&view=diff
==============================================================================
--- incubator/wink/trunk/wink-providers/wink-jackson-provider/src/test/java/org/apache/wink/providers/jackson/internal/JAXBCollectionJSONTest.java (original)
+++ incubator/wink/trunk/wink-providers/wink-jackson-provider/src/test/java/org/apache/wink/providers/jackson/internal/JAXBCollectionJSONTest.java Fri Apr 30 17:37:29 2010
@@ -1,349 +1,349 @@
-/*******************************************************************************
- * 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.wink.providers.jackson.internal;
-
-import java.io.IOException;
-import java.io.StringReader;
-import java.util.ArrayList;
-import java.util.GregorianCalendar;
-import java.util.List;
-
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.xml.bind.JAXBElement;
-import javax.xml.datatype.DatatypeConfigurationException;
-import javax.xml.datatype.DatatypeFactory;
-import javax.xml.datatype.XMLGregorianCalendar;
-import javax.xml.namespace.QName;
-
-import org.apache.wink.common.model.atom.AtomEntry;
-import org.apache.wink.providers.jackson.internal.jaxb.Person;
-import org.apache.wink.providers.json.JSONUtils;
-import org.apache.wink.server.internal.servlet.MockServletInvocationTest;
-import org.apache.wink.test.mock.MockRequestConstructor;
-import org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider;
-import org.json.JSONArray;
-import org.springframework.mock.web.MockHttpServletRequest;
-import org.springframework.mock.web.MockHttpServletResponse;
-
-public class JAXBCollectionJSONTest extends MockServletInvocationTest {
-
- private static final String ENTRY_STR_1 =
- "<entry xml:base=\"http://b216:8080/reporting/reports\" xmlns=\"http://www.w3.org/2005/Atom\">\n" + " <id>toptenvalidators</id>\n"
- + " <updated>2009-08-31T18:30:02Z</updated>\n"
- + " <title type=\"text\" xml:lang=\"en\">top ten validators 1</title>\n"
- + " <published>2009-08-31T18:30:02Z</published>\n"
- + " <link href=\"http://b216:8080/reporting/reports/toptenvalidators?alt=application/json\" type=\"application/json\" rel=\"alternate\"/>\n"
- + " <author>\n"
- + " <name>admin 1</name>\n"
- + " </author>\n"
- + " <category label=\"report definition\" scheme=\"urn:com:systinet:reporting:kind\" term=\"urn:com:systinet:reporting:kind:definition\"/>\n"
- + "</entry>";
- private static final String ENTRY_STR_2 =
- "<entry xml:base=\"http://b216:8080/reporting/reports\" xmlns=\"http://www.w3.org/2005/Atom\">\n" + " <id>toptenvalidators</id>\n"
- + " <updated>2009-08-31T18:30:02Z</updated>\n"
- + " <title type=\"text\" xml:lang=\"en\">top ten validators 2</title>\n"
- + " <published>2009-08-31T18:30:02Z</published>\n"
- + " <link href=\"http://b216:8080/reporting/reports/toptenvalidators?alt=application/json\" type=\"application/json\" rel=\"alternate\"/>\n"
- + " <author>\n"
- + " <name>admin 2</name>\n"
- + " </author>\n"
- + " <category label=\"report definition\" scheme=\"urn:com:systinet:reporting:kind\" term=\"urn:com:systinet:reporting:kind:definition\"/>\n"
- + "</entry>";
-
- private static final String ENTRY_STR_JSON_1 =
- "{\"base\":\"http://b216:8080/reporting/reports\"," + "\"otherAttributes\":{},"
- + "\"id\":\"toptenvalidators\","
- + "\"updated\":\"2009-08-31T18:30:02Z\","
- + "\"title\":{\"lang\":\"en\",\"otherAttributes\":{},\"type\":\"text\"},"
- + "\"published\":\"2009-08-31T18:30:02Z\","
- + "\"link\":[{\"otherAttributes\":{},\"rel\":\"alternate\",\"type\":\"application/json\",\"href\":\"http://b216:8080/reporting/reports/toptenvalidators?alt=application/json\"}],"
- + "\"author\":[{\"name\":\"admin 1\"}],"
- + "\"category\":[{\"otherAttributes\":{},\"term\":\"urn:com:systinet:reporting:kind:definition\",\"scheme\":\"urn:com:systinet:reporting:kind\",\"label\":\"report definition\"}]"
- + "}";
- private static final String ENTRY_STR_JSON_2 =
- "{\"base\":\"http://b216:8080/reporting/reports\"," + "\"otherAttributes\":{},"
- + "\"id\":\"toptenvalidators\","
- + "\"updated\":\"2009-08-31T18:30:02Z\","
- + "\"title\":{\"lang\":\"en\",\"otherAttributes\":{},\"type\":\"text\"},"
- + "\"published\":\"2009-08-31T18:30:02Z\","
- + "\"link\":[{\"otherAttributes\":{},\"rel\":\"alternate\",\"type\":\"application/json\",\"href\":\"http://b216:8080/reporting/reports/toptenvalidators?alt=application/json\"}],"
- + "\"author\":[{\"name\":\"admin 2\"}],"
- + "\"category\":[{\"otherAttributes\":{},\"term\":\"urn:com:systinet:reporting:kind:definition\",\"scheme\":\"urn:com:systinet:reporting:kind\",\"label\":\"report definition\"}]"
- + "}";
-
- private static final String ENTRY_STR_JSON_GET =
- "[{\"name\":\"{http://www.w3.org/2005/Atom}entry\"," + "\"declaredType\":\"org.apache.wink.common.model.atom.AtomEntry\","
- + "\"scope\":\"javax.xml.bind.JAXBElement$GlobalScope\","
- + "\"value\":"
- + ENTRY_STR_JSON_1
- + ",\"nil\":false, \"typeSubstituted\":false,\"globalScope\":true},"
- + "{\"name\":\"{http://www.w3.org/2005/Atom}entry\"," + "\"declaredType\":\"org.apache.wink.common.model.atom.AtomEntry\","
- + "\"scope\":\"javax.xml.bind.JAXBElement$GlobalScope\","
- + "\"value\":"
- + ENTRY_STR_JSON_2
- + ",\"nil\":false, \"typeSubstituted\":false,\"globalScope\":true}]";
-
- private static final String ENTRY_JSON_1;
- private static final String ENTRY_JSON_2;
-
- static {
-
- GregorianCalendar gCal = new GregorianCalendar();
- XMLGregorianCalendar xmlGCal = null;
- try {
- xmlGCal = DatatypeFactory.newInstance().newXMLGregorianCalendar(gCal);
- } catch (DatatypeConfigurationException e) {
- fail("could not construct XMLGregorianCalendar: " + e.getMessage());
- e.printStackTrace();
- }
- String jsonTimeStr1 = "{";
- jsonTimeStr1 += "\"eon\":" + xmlGCal.getEon() + ",";
- jsonTimeStr1 += "\"year\":" + xmlGCal.getYear() + ",";
- jsonTimeStr1 += "\"day\":" + xmlGCal.getDay() + ",";
- jsonTimeStr1 += "\"timezone\":" + xmlGCal.getTimezone() + ",";
- jsonTimeStr1 += "\"hour\":" + xmlGCal.getHour() + ",";
- jsonTimeStr1 += "\"minute\":" + xmlGCal.getMinute() + ",";
- jsonTimeStr1 += "\"second\":" + xmlGCal.getSecond() + ",";
- jsonTimeStr1 += "\"millisecond\":" + xmlGCal.getMillisecond();
- jsonTimeStr1 += "}";
- try {
- Thread.sleep(2000);
- } catch (InterruptedException e) {
- }
- String jsonTimeStr2 = "{";
- jsonTimeStr2 += "\"eon\":" + xmlGCal.getEon() + ",";
- jsonTimeStr2 += "\"year\":" + xmlGCal.getYear() + ",";
- jsonTimeStr2 += "\"day\":" + xmlGCal.getDay() + ",";
- jsonTimeStr2 += "\"timezone\":" + xmlGCal.getTimezone() + ",";
- jsonTimeStr2 += "\"hour\":" + xmlGCal.getHour() + ",";
- jsonTimeStr2 += "\"minute\":" + xmlGCal.getMinute() + ",";
- jsonTimeStr2 += "\"second\":" + xmlGCal.getSecond() + ",";
- jsonTimeStr2 += "\"millisecond\":" + xmlGCal.getMillisecond();
- jsonTimeStr2 += "}";
-
- ENTRY_JSON_1 = ENTRY_STR_JSON_1.replaceAll("@TIME_JSON@", jsonTimeStr1);
- ENTRY_JSON_2 = ENTRY_STR_JSON_2.replaceAll("@TIME_JSON@", jsonTimeStr2);
- }
-
- @Override
- protected Class<?>[] getClasses() {
- return new Class<?>[] {TestResource.class, PersonResource.class};
- }
-
- @Override
- protected Object[] getSingletons() {
- JacksonJaxbJsonProvider jacksonProvider = new JacksonJaxbJsonProvider();
- return new Object[] {jacksonProvider};
- }
-
- @Path("/test/person")
- public static class PersonResource {
-
- @GET
- @Path("collection")
- public List<Person> getPeopleCollection() throws IOException {
- List<Person> people = new ArrayList<Person>();
- Person p = new Person();
- p.setName("My Name");
- p.setDesc("My desc");
- people.add(p);
- p = new Person();
- p.setName("My Name 2");
- p.setDesc("My desc 2");
- people.add(p);
- return people;
- }
-
- @GET
- @Path("array")
- public Person[] getPeopleArray() throws IOException {
- return getPeopleCollection().toArray(new Person[] {});
- }
-
- @GET
- @Path("jaxbelement")
- public List<JAXBElement<Person>> getPeopleJAXBElementCollection() throws IOException {
- List<Person> people = getPeopleCollection();
- List<JAXBElement<Person>> ret = new ArrayList<JAXBElement<Person>>();
- JAXBElement<Person> element = null;
- for (Person p : people) {
- element = new JAXBElement<Person>(new QName("", "person"), Person.class, p);
- ret.add(element);
- }
- return ret;
- }
-
- @POST
- @Path("collection")
- public List<Person> postPeopleCollection(List<Person> p) {
- return p;
- }
-
- @POST
- @Path("array")
- public Person[] postPeopleArray(Person[] p) {
- return p;
- }
-
- }
-
- @Path("test")
- public static class TestResource {
-
- @GET
- @Path("atomentries/collection")
- @Produces("application/json")
- public List<AtomEntry> getAtomEntriesCollection() throws IOException {
- List<AtomEntry> entries = new ArrayList<AtomEntry>();
- AtomEntry entry1 = AtomEntry.unmarshal(new StringReader(ENTRY_STR_1));
- AtomEntry entry2 = AtomEntry.unmarshal(new StringReader(ENTRY_STR_2));
- entries.add(entry1);
- entries.add(entry2);
- return entries;
- }
-
- @GET
- @Path("atomentries/array")
- @Produces("application/json")
- public AtomEntry[] getAtomEntriesArray() throws IOException {
- return getAtomEntriesCollection().toArray(new AtomEntry[] {});
- }
-
- @GET
- @Path("atomentryelements/collection")
- @Produces("application/json")
- public List<JAXBElement<AtomEntry>> getAtomEntryElementCollection() throws IOException {
- List<JAXBElement<AtomEntry>> entries = new ArrayList<JAXBElement<AtomEntry>>();
- AtomEntry entry1 = AtomEntry.unmarshal(new StringReader(ENTRY_STR_1));
- AtomEntry entry2 = AtomEntry.unmarshal(new StringReader(ENTRY_STR_2));
- org.apache.wink.common.model.atom.ObjectFactory of =
- new org.apache.wink.common.model.atom.ObjectFactory();
- entries.add(of.createEntry(entry1));
- entries.add(of.createEntry(entry2));
- return entries;
- }
- }
-
- public void testGetPeople() throws Exception {
- MockHttpServletRequest request =
- MockRequestConstructor.constructMockRequest("GET",
- "/test/person/collection",
- "application/json");
- MockHttpServletResponse response = invoke(request);
- assertEquals(200, response.getStatus());
-
- assertTrue(JSONUtils
- .equals(new JSONArray(
- "[{\"desc\":\"My desc\",\"name\":\"My Name\"},{\"desc\":\"My desc 2\",\"name\":\"My Name 2\"}]"),
- new JSONArray(response.getContentAsString())));
-
- request =
- MockRequestConstructor.constructMockRequest("GET",
- "/test/person/array",
- "application/json");
- response = invoke(request);
- assertEquals(200, response.getStatus());
-
- assertTrue(JSONUtils
- .equals(new JSONArray(
- "[{\"desc\":\"My desc\",\"name\":\"My Name\"},{\"desc\":\"My desc 2\",\"name\":\"My Name 2\"}]"),
- new JSONArray(response.getContentAsString())));
-
- request =
- MockRequestConstructor.constructMockRequest("GET",
- "/test/person/jaxbelement",
- "application/json");
- response = invoke(request);
- assertEquals(200, response.getStatus());
-
- assertTrue(JSONUtils
- .equals(new JSONArray(
- "[{\"name\":\"person\",\"declaredType\":\"org.apache.wink.providers.jackson.internal.jaxb.Person\",\"scope\":\"javax.xml.bind.JAXBElement$GlobalScope\",\"value\":{\"name\":\"My Name\",\"desc\":\"My desc\"},\"nil\":false, \"typeSubstituted\":false,\"globalScope\":true},{\"name\":\"person\",\"declaredType\":\"org.apache.wink.providers.jackson.internal.jaxb.Person\",\"scope\":\"javax.xml.bind.JAXBElement$GlobalScope\",\"value\":{\"name\":\"My Name 2\",\"desc\":\"My desc 2\"},\"nil\":false, \"typeSubstituted\":false,\"globalScope\":true}]"),
- new JSONArray(response.getContentAsString())));
- }
-
- public void testPostPeople() throws Exception {
- MockHttpServletRequest request =
- MockRequestConstructor.constructMockRequest("POST",
- "/test/person/collection",
- "application/json");
- request.setContentType("application/json");
- request
- .setContent("[{\"desc\":\"My desc 1\",\"name\":\"My Name 1\"},{\"desc\":\"My desc 2\",\"name\":\"My Name 2\"}]"
- .getBytes());
- MockHttpServletResponse response = invoke(request);
- assertEquals(200, response.getStatus());
- assertTrue(JSONUtils
- .equals(new JSONArray(
- "[{\"desc\":\"My desc 1\",\"name\":\"My Name 1\"},{\"desc\":\"My desc 2\",\"name\":\"My Name 2\"}]"),
- new JSONArray(response.getContentAsString())));
-
- request =
- MockRequestConstructor.constructMockRequest("POST",
- "/test/person/array",
- "application/json");
- request.setContentType("application/json");
- request
- .setContent("[{\"desc\":\"My desc 1\",\"name\":\"My Name 1\"},{\"desc\":\"My desc 2\",\"name\":\"My Name 2\"}]"
- .getBytes());
- response = invoke(request);
- assertEquals(200, response.getStatus());
- assertTrue(JSONUtils
- .equals(new JSONArray(
- "[{\"desc\":\"My desc 1\",\"name\":\"My Name 1\"},{\"desc\":\"My desc 2\",\"name\":\"My Name 2\"}]"),
- new JSONArray(response.getContentAsString())));
-
- }
-
- public void testGetAtomEntries() throws Exception {
- MockHttpServletRequest request =
- MockRequestConstructor.constructMockRequest("GET",
- "/test/atomentries/collection",
- "application/json");
- MockHttpServletResponse response = invoke(request);
- assertEquals(200, response.getStatus());
- assertTrue(JSONUtils.equals(new JSONArray("[" + ENTRY_JSON_1 + "," + ENTRY_JSON_2 + "]"),
- new JSONArray(response.getContentAsString())));
-
- request =
- MockRequestConstructor.constructMockRequest("GET",
- "/test/atomentries/array",
- "application/json");
- response = invoke(request);
- assertEquals(200, response.getStatus());
- assertTrue(JSONUtils.equals(new JSONArray("[" + ENTRY_JSON_1 + "," + ENTRY_JSON_2 + "]"),
- new JSONArray(response.getContentAsString())));
- }
-
- public void testGetAtomEntryElements() throws Exception {
- MockHttpServletRequest request =
- MockRequestConstructor.constructMockRequest("GET",
- "/test/atomentryelements/collection",
- "application/json");
- MockHttpServletResponse response = invoke(request);
- assertEquals(200, response.getStatus());
- assertTrue(JSONUtils.equals(new JSONArray(ENTRY_STR_JSON_GET), new JSONArray(response
- .getContentAsString())));
- }
-}
+/*******************************************************************************
+ * 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.wink.providers.jackson.internal;
+
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.GregorianCalendar;
+import java.util.List;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.xml.bind.JAXBElement;
+import javax.xml.datatype.DatatypeConfigurationException;
+import javax.xml.datatype.DatatypeFactory;
+import javax.xml.datatype.XMLGregorianCalendar;
+import javax.xml.namespace.QName;
+
+import org.apache.wink.common.model.atom.AtomEntry;
+import org.apache.wink.providers.jackson.internal.jaxb.Person;
+import org.apache.wink.providers.json.JSONUtils;
+import org.apache.wink.server.internal.servlet.MockServletInvocationTest;
+import org.apache.wink.test.mock.MockRequestConstructor;
+import org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider;
+import org.json.JSONArray;
+import org.springframework.mock.web.MockHttpServletRequest;
+import org.springframework.mock.web.MockHttpServletResponse;
+
+public class JAXBCollectionJSONTest extends MockServletInvocationTest {
+
+ private static final String ENTRY_STR_1 =
+ "<entry xml:base=\"http://b216:8080/reporting/reports\" xmlns=\"http://www.w3.org/2005/Atom\">\n" + " <id>toptenvalidators</id>\n"
+ + " <updated>2009-08-31T18:30:02Z</updated>\n"
+ + " <title type=\"text\" xml:lang=\"en\">top ten validators 1</title>\n"
+ + " <published>2009-08-31T18:30:02Z</published>\n"
+ + " <link href=\"http://b216:8080/reporting/reports/toptenvalidators?alt=application/json\" type=\"application/json\" rel=\"alternate\"/>\n"
+ + " <author>\n"
+ + " <name>admin 1</name>\n"
+ + " </author>\n"
+ + " <category label=\"report definition\" scheme=\"urn:com:systinet:reporting:kind\" term=\"urn:com:systinet:reporting:kind:definition\"/>\n"
+ + "</entry>";
+ private static final String ENTRY_STR_2 =
+ "<entry xml:base=\"http://b216:8080/reporting/reports\" xmlns=\"http://www.w3.org/2005/Atom\">\n" + " <id>toptenvalidators</id>\n"
+ + " <updated>2009-08-31T18:30:02Z</updated>\n"
+ + " <title type=\"text\" xml:lang=\"en\">top ten validators 2</title>\n"
+ + " <published>2009-08-31T18:30:02Z</published>\n"
+ + " <link href=\"http://b216:8080/reporting/reports/toptenvalidators?alt=application/json\" type=\"application/json\" rel=\"alternate\"/>\n"
+ + " <author>\n"
+ + " <name>admin 2</name>\n"
+ + " </author>\n"
+ + " <category label=\"report definition\" scheme=\"urn:com:systinet:reporting:kind\" term=\"urn:com:systinet:reporting:kind:definition\"/>\n"
+ + "</entry>";
+
+ private static final String ENTRY_STR_JSON_1 =
+ "{\"base\":\"http://b216:8080/reporting/reports\"," + "\"otherAttributes\":{},"
+ + "\"id\":\"toptenvalidators\","
+ + "\"updated\":\"2009-08-31T18:30:02Z\","
+ + "\"title\":{\"lang\":\"en\",\"otherAttributes\":{},\"type\":\"text\"},"
+ + "\"published\":\"2009-08-31T18:30:02Z\","
+ + "\"link\":[{\"otherAttributes\":{},\"rel\":\"alternate\",\"type\":\"application/json\",\"href\":\"http://b216:8080/reporting/reports/toptenvalidators?alt=application/json\"}],"
+ + "\"author\":[{\"name\":\"admin 1\"}],"
+ + "\"category\":[{\"otherAttributes\":{},\"term\":\"urn:com:systinet:reporting:kind:definition\",\"scheme\":\"urn:com:systinet:reporting:kind\",\"label\":\"report definition\"}]"
+ + "}";
+ private static final String ENTRY_STR_JSON_2 =
+ "{\"base\":\"http://b216:8080/reporting/reports\"," + "\"otherAttributes\":{},"
+ + "\"id\":\"toptenvalidators\","
+ + "\"updated\":\"2009-08-31T18:30:02Z\","
+ + "\"title\":{\"lang\":\"en\",\"otherAttributes\":{},\"type\":\"text\"},"
+ + "\"published\":\"2009-08-31T18:30:02Z\","
+ + "\"link\":[{\"otherAttributes\":{},\"rel\":\"alternate\",\"type\":\"application/json\",\"href\":\"http://b216:8080/reporting/reports/toptenvalidators?alt=application/json\"}],"
+ + "\"author\":[{\"name\":\"admin 2\"}],"
+ + "\"category\":[{\"otherAttributes\":{},\"term\":\"urn:com:systinet:reporting:kind:definition\",\"scheme\":\"urn:com:systinet:reporting:kind\",\"label\":\"report definition\"}]"
+ + "}";
+
+ private static final String ENTRY_STR_JSON_GET =
+ "[{\"name\":\"{http://www.w3.org/2005/Atom}entry\"," + "\"declaredType\":\"org.apache.wink.common.model.atom.AtomEntry\","
+ + "\"scope\":\"javax.xml.bind.JAXBElement$GlobalScope\","
+ + "\"value\":"
+ + ENTRY_STR_JSON_1
+ + ",\"nil\":false, \"typeSubstituted\":false,\"globalScope\":true},"
+ + "{\"name\":\"{http://www.w3.org/2005/Atom}entry\"," + "\"declaredType\":\"org.apache.wink.common.model.atom.AtomEntry\","
+ + "\"scope\":\"javax.xml.bind.JAXBElement$GlobalScope\","
+ + "\"value\":"
+ + ENTRY_STR_JSON_2
+ + ",\"nil\":false, \"typeSubstituted\":false,\"globalScope\":true}]";
+
+ private static final String ENTRY_JSON_1;
+ private static final String ENTRY_JSON_2;
+
+ static {
+
+ GregorianCalendar gCal = new GregorianCalendar();
+ XMLGregorianCalendar xmlGCal = null;
+ try {
+ xmlGCal = DatatypeFactory.newInstance().newXMLGregorianCalendar(gCal);
+ } catch (DatatypeConfigurationException e) {
+ fail("could not construct XMLGregorianCalendar: " + e.getMessage());
+ e.printStackTrace();
+ }
+ String jsonTimeStr1 = "{";
+ jsonTimeStr1 += "\"eon\":" + xmlGCal.getEon() + ",";
+ jsonTimeStr1 += "\"year\":" + xmlGCal.getYear() + ",";
+ jsonTimeStr1 += "\"day\":" + xmlGCal.getDay() + ",";
+ jsonTimeStr1 += "\"timezone\":" + xmlGCal.getTimezone() + ",";
+ jsonTimeStr1 += "\"hour\":" + xmlGCal.getHour() + ",";
+ jsonTimeStr1 += "\"minute\":" + xmlGCal.getMinute() + ",";
+ jsonTimeStr1 += "\"second\":" + xmlGCal.getSecond() + ",";
+ jsonTimeStr1 += "\"millisecond\":" + xmlGCal.getMillisecond();
+ jsonTimeStr1 += "}";
+ try {
+ Thread.sleep(2000);
+ } catch (InterruptedException e) {
+ }
+ String jsonTimeStr2 = "{";
+ jsonTimeStr2 += "\"eon\":" + xmlGCal.getEon() + ",";
+ jsonTimeStr2 += "\"year\":" + xmlGCal.getYear() + ",";
+ jsonTimeStr2 += "\"day\":" + xmlGCal.getDay() + ",";
+ jsonTimeStr2 += "\"timezone\":" + xmlGCal.getTimezone() + ",";
+ jsonTimeStr2 += "\"hour\":" + xmlGCal.getHour() + ",";
+ jsonTimeStr2 += "\"minute\":" + xmlGCal.getMinute() + ",";
+ jsonTimeStr2 += "\"second\":" + xmlGCal.getSecond() + ",";
+ jsonTimeStr2 += "\"millisecond\":" + xmlGCal.getMillisecond();
+ jsonTimeStr2 += "}";
+
+ ENTRY_JSON_1 = ENTRY_STR_JSON_1.replaceAll("@TIME_JSON@", jsonTimeStr1);
+ ENTRY_JSON_2 = ENTRY_STR_JSON_2.replaceAll("@TIME_JSON@", jsonTimeStr2);
+ }
+
+ @Override
+ protected Class<?>[] getClasses() {
+ return new Class<?>[] {TestResource.class, PersonResource.class};
+ }
+
+ @Override
+ protected Object[] getSingletons() {
+ JacksonJaxbJsonProvider jacksonProvider = new JacksonJaxbJsonProvider();
+ return new Object[] {jacksonProvider};
+ }
+
+ @Path("/test/person")
+ public static class PersonResource {
+
+ @GET
+ @Path("collection")
+ public List<Person> getPeopleCollection() throws IOException {
+ List<Person> people = new ArrayList<Person>();
+ Person p = new Person();
+ p.setName("My Name");
+ p.setDesc("My desc");
+ people.add(p);
+ p = new Person();
+ p.setName("My Name 2");
+ p.setDesc("My desc 2");
+ people.add(p);
+ return people;
+ }
+
+ @GET
+ @Path("array")
+ public Person[] getPeopleArray() throws IOException {
+ return getPeopleCollection().toArray(new Person[] {});
+ }
+
+ @GET
+ @Path("jaxbelement")
+ public List<JAXBElement<Person>> getPeopleJAXBElementCollection() throws IOException {
+ List<Person> people = getPeopleCollection();
+ List<JAXBElement<Person>> ret = new ArrayList<JAXBElement<Person>>();
+ JAXBElement<Person> element = null;
+ for (Person p : people) {
+ element = new JAXBElement<Person>(new QName("", "person"), Person.class, p);
+ ret.add(element);
+ }
+ return ret;
+ }
+
+ @POST
+ @Path("collection")
+ public List<Person> postPeopleCollection(List<Person> p) {
+ return p;
+ }
+
+ @POST
+ @Path("array")
+ public Person[] postPeopleArray(Person[] p) {
+ return p;
+ }
+
+ }
+
+ @Path("test")
+ public static class TestResource {
+
+ @GET
+ @Path("atomentries/collection")
+ @Produces("application/json")
+ public List<AtomEntry> getAtomEntriesCollection() throws IOException {
+ List<AtomEntry> entries = new ArrayList<AtomEntry>();
+ AtomEntry entry1 = AtomEntry.unmarshal(new StringReader(ENTRY_STR_1));
+ AtomEntry entry2 = AtomEntry.unmarshal(new StringReader(ENTRY_STR_2));
+ entries.add(entry1);
+ entries.add(entry2);
+ return entries;
+ }
+
+ @GET
+ @Path("atomentries/array")
+ @Produces("application/json")
+ public AtomEntry[] getAtomEntriesArray() throws IOException {
+ return getAtomEntriesCollection().toArray(new AtomEntry[] {});
+ }
+
+ @GET
+ @Path("atomentryelements/collection")
+ @Produces("application/json")
+ public List<JAXBElement<AtomEntry>> getAtomEntryElementCollection() throws IOException {
+ List<JAXBElement<AtomEntry>> entries = new ArrayList<JAXBElement<AtomEntry>>();
+ AtomEntry entry1 = AtomEntry.unmarshal(new StringReader(ENTRY_STR_1));
+ AtomEntry entry2 = AtomEntry.unmarshal(new StringReader(ENTRY_STR_2));
+ org.apache.wink.common.model.atom.ObjectFactory of =
+ new org.apache.wink.common.model.atom.ObjectFactory();
+ entries.add(of.createEntry(entry1));
+ entries.add(of.createEntry(entry2));
+ return entries;
+ }
+ }
+
+ public void testGetPeople() throws Exception {
+ MockHttpServletRequest request =
+ MockRequestConstructor.constructMockRequest("GET",
+ "/test/person/collection",
+ "application/json");
+ MockHttpServletResponse response = invoke(request);
+ assertEquals(200, response.getStatus());
+
+ assertTrue(JSONUtils
+ .equals(new JSONArray(
+ "[{\"desc\":\"My desc\",\"name\":\"My Name\"},{\"desc\":\"My desc 2\",\"name\":\"My Name 2\"}]"),
+ new JSONArray(response.getContentAsString())));
+
+ request =
+ MockRequestConstructor.constructMockRequest("GET",
+ "/test/person/array",
+ "application/json");
+ response = invoke(request);
+ assertEquals(200, response.getStatus());
+
+ assertTrue(JSONUtils
+ .equals(new JSONArray(
+ "[{\"desc\":\"My desc\",\"name\":\"My Name\"},{\"desc\":\"My desc 2\",\"name\":\"My Name 2\"}]"),
+ new JSONArray(response.getContentAsString())));
+
+ request =
+ MockRequestConstructor.constructMockRequest("GET",
+ "/test/person/jaxbelement",
+ "application/json");
+ response = invoke(request);
+ assertEquals(200, response.getStatus());
+
+ assertTrue(JSONUtils
+ .equals(new JSONArray(
+ "[{\"name\":\"person\",\"declaredType\":\"org.apache.wink.providers.jackson.internal.jaxb.Person\",\"scope\":\"javax.xml.bind.JAXBElement$GlobalScope\",\"value\":{\"name\":\"My Name\",\"desc\":\"My desc\"},\"nil\":false, \"typeSubstituted\":false,\"globalScope\":true},{\"name\":\"person\",\"declaredType\":\"org.apache.wink.providers.jackson.internal.jaxb.Person\",\"scope\":\"javax.xml.bind.JAXBElement$GlobalScope\",\"value\":{\"name\":\"My Name 2\",\"desc\":\"My desc 2\"},\"nil\":false, \"typeSubstituted\":false,\"globalScope\":true}]"),
+ new JSONArray(response.getContentAsString())));
+ }
+
+ public void testPostPeople() throws Exception {
+ MockHttpServletRequest request =
+ MockRequestConstructor.constructMockRequest("POST",
+ "/test/person/collection",
+ "application/json");
+ request.setContentType("application/json");
+ request
+ .setContent("[{\"desc\":\"My desc 1\",\"name\":\"My Name 1\"},{\"desc\":\"My desc 2\",\"name\":\"My Name 2\"}]"
+ .getBytes());
+ MockHttpServletResponse response = invoke(request);
+ assertEquals(200, response.getStatus());
+ assertTrue(JSONUtils
+ .equals(new JSONArray(
+ "[{\"desc\":\"My desc 1\",\"name\":\"My Name 1\"},{\"desc\":\"My desc 2\",\"name\":\"My Name 2\"}]"),
+ new JSONArray(response.getContentAsString())));
+
+ request =
+ MockRequestConstructor.constructMockRequest("POST",
+ "/test/person/array",
+ "application/json");
+ request.setContentType("application/json");
+ request
+ .setContent("[{\"desc\":\"My desc 1\",\"name\":\"My Name 1\"},{\"desc\":\"My desc 2\",\"name\":\"My Name 2\"}]"
+ .getBytes());
+ response = invoke(request);
+ assertEquals(200, response.getStatus());
+ assertTrue(JSONUtils
+ .equals(new JSONArray(
+ "[{\"desc\":\"My desc 1\",\"name\":\"My Name 1\"},{\"desc\":\"My desc 2\",\"name\":\"My Name 2\"}]"),
+ new JSONArray(response.getContentAsString())));
+
+ }
+
+ public void testGetAtomEntries() throws Exception {
+ MockHttpServletRequest request =
+ MockRequestConstructor.constructMockRequest("GET",
+ "/test/atomentries/collection",
+ "application/json");
+ MockHttpServletResponse response = invoke(request);
+ assertEquals(200, response.getStatus());
+ assertTrue(JSONUtils.equals(new JSONArray("[" + ENTRY_JSON_1 + "," + ENTRY_JSON_2 + "]"),
+ new JSONArray(response.getContentAsString())));
+
+ request =
+ MockRequestConstructor.constructMockRequest("GET",
+ "/test/atomentries/array",
+ "application/json");
+ response = invoke(request);
+ assertEquals(200, response.getStatus());
+ assertTrue(JSONUtils.equals(new JSONArray("[" + ENTRY_JSON_1 + "," + ENTRY_JSON_2 + "]"),
+ new JSONArray(response.getContentAsString())));
+ }
+
+ public void testGetAtomEntryElements() throws Exception {
+ MockHttpServletRequest request =
+ MockRequestConstructor.constructMockRequest("GET",
+ "/test/atomentryelements/collection",
+ "application/json");
+ MockHttpServletResponse response = invoke(request);
+ assertEquals(200, response.getStatus());
+ assertTrue(JSONUtils.equals(new JSONArray(ENTRY_STR_JSON_GET), new JSONArray(response
+ .getContentAsString())));
+ }
+}