You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2014/07/25 17:10:33 UTC
git commit: [CXF-5844] Merging annotations on the output if the
annotated and invoked methods are different
Repository: cxf
Updated Branches:
refs/heads/master 272156399 -> ba167351c
[CXF-5844] Merging annotations on the output if the annotated and invoked methods are different
Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/ba167351
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/ba167351
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/ba167351
Branch: refs/heads/master
Commit: ba167351c03a0e72ca4dcd13667b5da55bb8175e
Parents: 2721563
Author: Sergey Beryozkin <sb...@talend.com>
Authored: Fri Jul 25 18:10:15 2014 +0300
Committer: Sergey Beryozkin <sb...@talend.com>
Committed: Fri Jul 25 18:10:15 2014 +0300
----------------------------------------------------------------------
.../jaxrs/interceptor/JAXRSOutInterceptor.java | 2 +-
.../cxf/jaxrs/model/OperationResourceInfo.java | 17 +++++++
.../systest/jaxrs/BookStoreWithInterface.java | 3 ++
.../jaxrs/CustomJaxbElementProvider.java | 48 ++++++++++++++++++++
.../resources/jaxrs_proxy/WEB-INF/beans.xml | 7 ++-
5 files changed, 75 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cxf/blob/ba167351/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java
----------------------------------------------------------------------
diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java
index d0b4baa..13f0647 100644
--- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java
+++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java
@@ -148,7 +148,7 @@ public class JAXRSOutInterceptor extends AbstractOutDatabindingInterceptor {
? ori.getAnnotatedMethod() : ori.getMethodToInvoke();
Annotation[] annotations = null;
- Annotation[] staticAnns = invoked != null ? invoked.getAnnotations() : new Annotation[]{};
+ Annotation[] staticAnns = ori != null ? ori.getOutAnnotations() : new Annotation[]{};
Annotation[] responseAnns = response.getEntityAnnotations();
if (responseAnns != null) {
annotations = new Annotation[staticAnns.length + responseAnns.length];
http://git-wip-us.apache.org/repos/asf/cxf/blob/ba167351/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/OperationResourceInfo.java
----------------------------------------------------------------------
diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/OperationResourceInfo.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/OperationResourceInfo.java
index d6a5686..c9c9ac1 100644
--- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/OperationResourceInfo.java
+++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/OperationResourceInfo.java
@@ -19,6 +19,7 @@
package org.apache.cxf.jaxrs.model;
+import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.util.LinkedHashSet;
import java.util.List;
@@ -235,4 +236,20 @@ public class OperationResourceInfo {
defaultParamValue = dv.value();
}
}
+ public Annotation[] getOutAnnotations() {
+ Annotation[] invokedAnns = methodToInvoke.getAnnotations();
+ if (methodToInvoke != annotatedMethod && annotatedMethod != null) {
+ Annotation[] superAnns = annotatedMethod.getAnnotations();
+ if (invokedAnns.length > 0) {
+ Annotation[] merged = new Annotation[superAnns.length + invokedAnns.length];
+ System.arraycopy(superAnns, 0, merged, 0, superAnns.length);
+ System.arraycopy(invokedAnns, 0, merged, superAnns.length, invokedAnns.length);
+ return merged;
+ } else {
+ return superAnns;
+ }
+ } else {
+ return invokedAnns;
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/cxf/blob/ba167351/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStoreWithInterface.java
----------------------------------------------------------------------
diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStoreWithInterface.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStoreWithInterface.java
index eb7d001..741f1c6 100644
--- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStoreWithInterface.java
+++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStoreWithInterface.java
@@ -38,6 +38,8 @@
package org.apache.cxf.systest.jaxrs;
+import org.apache.cxf.annotations.SchemaValidation;
+
@@ -59,6 +61,7 @@ public class BookStoreWithInterface extends BookStoreStorage implements BookInte
return doGetBook(id);
}
+ @SchemaValidation
public Book getThatBook(Long id) throws BookNotFoundFault {
checkPostConstruct();
return doGetBook(id);
http://git-wip-us.apache.org/repos/asf/cxf/blob/ba167351/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/CustomJaxbElementProvider.java
----------------------------------------------------------------------
diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/CustomJaxbElementProvider.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/CustomJaxbElementProvider.java
new file mode 100644
index 0000000..76af000
--- /dev/null
+++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/CustomJaxbElementProvider.java
@@ -0,0 +1,48 @@
+/**
+ * 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.cxf.systest.jaxrs;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.UriInfo;
+
+import org.apache.cxf.annotations.SchemaValidation;
+import org.apache.cxf.jaxrs.provider.JAXBElementProvider;
+
+public class CustomJaxbElementProvider extends JAXBElementProvider<Book> {
+ @Context
+ private UriInfo ui;
+ @Override
+ public boolean isWriteable(Class<?> type, Type genericType, Annotation[] anns, MediaType mt) {
+ if (ui.getRequestUri().toString().endsWith("/test/5/bookstorestorage/thosebooks/123")) {
+ for (Annotation ann : anns) {
+ if (ann.annotationType() == SchemaValidation.class) {
+ return super.isWriteable(type, genericType, anns, mt);
+ }
+ }
+ throw new RuntimeException();
+ } else {
+ return super.isWriteable(type, genericType, anns, mt);
+ }
+
+ }
+}
http://git-wip-us.apache.org/repos/asf/cxf/blob/ba167351/systests/jaxrs/src/test/resources/jaxrs_proxy/WEB-INF/beans.xml
----------------------------------------------------------------------
diff --git a/systests/jaxrs/src/test/resources/jaxrs_proxy/WEB-INF/beans.xml b/systests/jaxrs/src/test/resources/jaxrs_proxy/WEB-INF/beans.xml
index 12b7093..88c583e 100644
--- a/systests/jaxrs/src/test/resources/jaxrs_proxy/WEB-INF/beans.xml
+++ b/systests/jaxrs/src/test/resources/jaxrs_proxy/WEB-INF/beans.xml
@@ -59,7 +59,12 @@
<ref bean="sfactory2"/>
</jaxrs:serviceFactories>
</jaxrs:server>
- <jaxrs:server id="bookservice5" address="/5" beanNames="bookstorePrototype bookstoreInterfacePrototype"/>
+ <jaxrs:server id="bookservice5" address="/5"
+ beanNames="bookstorePrototype bookstoreInterfacePrototype">
+ <jaxrs:providers>
+ <bean class="org.apache.cxf.systest.jaxrs.CustomJaxbElementProvider"/>
+ </jaxrs:providers>
+ </jaxrs:server>
<jaxrs:server id="bookservice6" address="/6">
<jaxrs:serviceFactories>
<ref bean="sfactory5"/>