You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stanbol.apache.org by rw...@apache.org on 2012/05/16 14:12:37 UTC
svn commit: r1339130 - in /incubator/stanbol/trunk/commons/web/base/src:
main/java/org/apache/stanbol/commons/web/base/
test/java/org/apache/stanbol/commons/web/base/
Author: rwesten
Date: Wed May 16 12:12:37 2012
New Revision: 1339130
URL: http://svn.apache.org/viewvc?rev=1339130&view=rev
Log:
fixes STANBOL-616 and adds a unit test for it.
Added:
incubator/stanbol/trunk/commons/web/base/src/test/java/org/apache/stanbol/commons/web/base/CorsAccessControlAllowMethodTest.java (with props)
incubator/stanbol/trunk/commons/web/base/src/test/java/org/apache/stanbol/commons/web/base/MockHttpHeaders.java (with props)
incubator/stanbol/trunk/commons/web/base/src/test/java/org/apache/stanbol/commons/web/base/MockServletContext.java (with props)
Modified:
incubator/stanbol/trunk/commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/CorsHelper.java
Modified: incubator/stanbol/trunk/commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/CorsHelper.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/CorsHelper.java?rev=1339130&r1=1339129&r2=1339130&view=diff
==============================================================================
--- incubator/stanbol/trunk/commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/CorsHelper.java (original)
+++ incubator/stanbol/trunk/commons/web/base/src/main/java/org/apache/stanbol/commons/web/base/CorsHelper.java Wed May 16 12:12:37 2012
@@ -53,7 +53,7 @@ public final class CorsHelper {
* The "Access-Control-Request-Method" header
*/
public static final String REQUEST_METHOD = "Access-Control-Request-Method";
-
+
/**
* The "Access-Control-Request-Headers" header
*/
@@ -64,6 +64,10 @@ public final class CorsHelper {
*/
public static final String ALLOW_HEADERS = "Access-Control-Allow-Headers";
+ /**
+ * The "Access-Control-Allow-Method" header
+ */
+ public static final String ALLOW_METHOD = "Access-Control-Allow-Method";
/**
* The default methods for the Access-Control-Request-Method header field.
@@ -175,7 +179,7 @@ public final class CorsHelper {
if(!added){
methods.append(CorsHelper.DEFAULT_REQUEST_METHODS);
}
- responseBuilder.header(CorsHelper.REQUEST_METHOD, methods.toString());
+ responseBuilder.header(CorsHelper.ALLOW_METHOD, methods.toString());
//third replay parsed "Access-Control-Request-Headers" values
//currently there is no need to restrict such headers so the simplest
//way is to return them as they are parsed
Added: incubator/stanbol/trunk/commons/web/base/src/test/java/org/apache/stanbol/commons/web/base/CorsAccessControlAllowMethodTest.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/commons/web/base/src/test/java/org/apache/stanbol/commons/web/base/CorsAccessControlAllowMethodTest.java?rev=1339130&view=auto
==============================================================================
--- incubator/stanbol/trunk/commons/web/base/src/test/java/org/apache/stanbol/commons/web/base/CorsAccessControlAllowMethodTest.java (added)
+++ incubator/stanbol/trunk/commons/web/base/src/test/java/org/apache/stanbol/commons/web/base/CorsAccessControlAllowMethodTest.java Wed May 16 12:12:37 2012
@@ -0,0 +1,81 @@
+/*
+* 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.stanbol.commons.web.base;
+
+import static javax.ws.rs.HttpMethod.GET;
+import static javax.ws.rs.HttpMethod.OPTIONS;
+import static javax.ws.rs.HttpMethod.POST;
+import static javax.ws.rs.HttpMethod.PUT;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import javax.servlet.ServletContext;
+import javax.ws.rs.HttpMethod;
+import javax.ws.rs.core.Cookie;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.ResponseBuilder;
+
+import org.apache.stanbol.commons.web.base.CorsHelper;
+import org.junit.Assert;
+import org.junit.Test;
+
+import com.sun.jersey.core.util.MultivaluedMapImpl;
+
+/**
+ * Tests issue reported/fix for STANBOL-616
+ * @author Rupert Westenthaler
+ *
+ */
+public class CorsAccessControlAllowMethodTest {
+
+ @Test
+ public void testAccessControlAllowMethodTest(){
+ ServletContext context = new MockServletContext();
+ context.setAttribute(JerseyEndpoint.CORS_ORIGIN, Collections.singleton("*"));
+ MultivaluedMap<String,String> header = new MultivaluedMapImpl();
+ header.add("Origin", "https://issues.apache.org/jira/browse/STANBOL-616");
+ header.put("Access-Control-Request-Headers", Arrays.asList("Origin", "Content-Type", "Accept"));
+ header.add("Access-Control-Request-Method", "PUT");
+ HttpHeaders requestHeaders = new MockHttpHeaders(header);
+
+
+ ResponseBuilder builder = Response.ok("Test");
+ CorsHelper.enableCORS(context, builder, requestHeaders, OPTIONS,GET,POST,PUT);
+ Response response = builder.build();
+ MultivaluedMap<String,Object> metadata = response.getMetadata();
+ Assert.assertTrue("'Access-Control-Allow-Headers' expected", metadata.containsKey("Access-Control-Allow-Headers"));
+ String value = (String)metadata.getFirst("Access-Control-Allow-Headers");
+ Assert.assertTrue("'Access-Control-Allow-Headers' does not contain the expected values",
+ value.contains("Origin") && value.contains("Content-Type") && value.contains("Accept"));
+ Assert.assertTrue("'Access-Control-Allow-Origin' expected", metadata.containsKey("Access-Control-Allow-Origin"));
+ Assert.assertEquals("'Access-Control-Allow-Origin' does not have the expected value '*'",
+ "*", metadata.getFirst("Access-Control-Allow-Origin"));
+ Assert.assertTrue("'Access-Control-Allow-Method' expected", metadata.containsKey("Access-Control-Allow-Method"));
+ value = (String)metadata.getFirst("Access-Control-Allow-Method");
+ Assert.assertTrue("'Access-Control-Allow-Method' does not contain the expected values",
+ value.contains(OPTIONS) && value.contains(GET) && value.contains(POST) && value.contains(PUT));
+ }
+
+
+}
Propchange: incubator/stanbol/trunk/commons/web/base/src/test/java/org/apache/stanbol/commons/web/base/CorsAccessControlAllowMethodTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: incubator/stanbol/trunk/commons/web/base/src/test/java/org/apache/stanbol/commons/web/base/MockHttpHeaders.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/commons/web/base/src/test/java/org/apache/stanbol/commons/web/base/MockHttpHeaders.java?rev=1339130&view=auto
==============================================================================
--- incubator/stanbol/trunk/commons/web/base/src/test/java/org/apache/stanbol/commons/web/base/MockHttpHeaders.java (added)
+++ incubator/stanbol/trunk/commons/web/base/src/test/java/org/apache/stanbol/commons/web/base/MockHttpHeaders.java Wed May 16 12:12:37 2012
@@ -0,0 +1,78 @@
+/*
+* 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.stanbol.commons.web.base;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import javax.ws.rs.core.Cookie;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
+
+/**
+ * Mock {@link HttpHeaders} implementation used to parse request headers for
+ * unit tests
+ * @author Rupert Westenthaler
+ *
+ */
+public class MockHttpHeaders implements HttpHeaders {
+
+ private MultivaluedMap<String,String> headers;
+
+ protected MockHttpHeaders(MultivaluedMap<String,String> headers){
+ this.headers = headers;
+ }
+
+ @Override
+ public List<String> getRequestHeader(String name) {
+ return headers.get(name);
+ }
+
+ @Override
+ public MultivaluedMap<String,String> getRequestHeaders() {
+ return headers;
+ }
+
+ @Override
+ public List<MediaType> getAcceptableMediaTypes() {
+ return Collections.singletonList(MediaType.WILDCARD_TYPE);
+ }
+
+ @Override
+ public List<Locale> getAcceptableLanguages() {
+ return null;
+ }
+
+ @Override
+ public MediaType getMediaType() {
+ return MediaType.TEXT_PLAIN_TYPE;
+ }
+
+ @Override
+ public Locale getLanguage() {
+ return new Locale("en");
+ }
+
+ @Override
+ public Map<String,Cookie> getCookies() {
+ return Collections.emptyMap();
+ }
+
+}
Propchange: incubator/stanbol/trunk/commons/web/base/src/test/java/org/apache/stanbol/commons/web/base/MockHttpHeaders.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: incubator/stanbol/trunk/commons/web/base/src/test/java/org/apache/stanbol/commons/web/base/MockServletContext.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/commons/web/base/src/test/java/org/apache/stanbol/commons/web/base/MockServletContext.java?rev=1339130&view=auto
==============================================================================
--- incubator/stanbol/trunk/commons/web/base/src/test/java/org/apache/stanbol/commons/web/base/MockServletContext.java (added)
+++ incubator/stanbol/trunk/commons/web/base/src/test/java/org/apache/stanbol/commons/web/base/MockServletContext.java Wed May 16 12:12:37 2012
@@ -0,0 +1,175 @@
+/*
+* 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.stanbol.commons.web.base;
+
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import javax.servlet.RequestDispatcher;
+import javax.servlet.Servlet;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+
+/**
+ * Only implements attribute related methods
+ * @author Rupert Westenthaler
+ *
+ */
+public final class MockServletContext implements ServletContext {
+
+ private final Map<String,Object> attributes = new HashMap<String,Object>();
+
+ protected MockServletContext() {}
+
+ @Override
+ public Object getAttribute(String name) {
+ return attributes.get(name);
+ }
+ @Override
+ public Enumeration getAttributeNames() {
+ return new Enumeration<String>() {
+ Iterator<String> it = attributes.keySet().iterator();
+ @Override
+ public boolean hasMoreElements() {
+ // TODO Auto-generated method stub
+ return it.hasNext();
+ }
+
+ @Override
+ public String nextElement() {
+ return it.next();
+ }
+
+ };
+ }
+
+ @Override
+ public void setAttribute(String name, Object object) {
+ attributes.put(name, object);
+ }
+
+ @Override
+ public void removeAttribute(String name) {
+ attributes.remove(name);
+ }
+
+
+
+ @Override
+ public ServletContext getContext(String uripath) {
+ return null;
+ }
+
+ @Override
+ public int getMajorVersion() {
+ return 0;
+ }
+
+ @Override
+ public int getMinorVersion() {
+ return 0;
+ }
+
+ @Override
+ public String getMimeType(String file) {
+ return null;
+ }
+
+ @Override
+ public Set getResourcePaths(String path) {
+ return null;
+ }
+
+ @Override
+ public URL getResource(String path) throws MalformedURLException {
+ return null;
+ }
+
+ @Override
+ public InputStream getResourceAsStream(String path) {
+ return null;
+ }
+
+ @Override
+ public RequestDispatcher getRequestDispatcher(String path) {
+ return null;
+ }
+
+ @Override
+ public RequestDispatcher getNamedDispatcher(String name) {
+ return null;
+ }
+
+ @Override
+ public Servlet getServlet(String name) throws ServletException {
+ return null;
+ }
+
+ @Override
+ public Enumeration getServlets() {
+ return null;
+ }
+
+ @Override
+ public Enumeration getServletNames() {
+ return null;
+ }
+
+ @Override
+ public void log(String msg) {
+ }
+
+ @Override
+ public void log(Exception exception, String msg) {
+ }
+
+ @Override
+ public void log(String message, Throwable throwable) {
+ }
+
+ @Override
+ public String getRealPath(String path) {
+ return null;
+ }
+
+ @Override
+ public String getServerInfo() {
+ return null;
+ }
+
+ @Override
+ public String getInitParameter(String name) {
+ return null;
+ }
+
+ @Override
+ public Enumeration getInitParameterNames() {
+ return null;
+ }
+
+ @Override
+ public String getServletContextName() {
+ return "Mock";
+ }
+
+}
Propchange: incubator/stanbol/trunk/commons/web/base/src/test/java/org/apache/stanbol/commons/web/base/MockServletContext.java
------------------------------------------------------------------------------
svn:mime-type = text/plain