Author: ffang
Date: Wed Jul 25 01:48:45 2007
New Revision: 559358
URL: http://svn.apache.org/viewvc?view=rev&rev=559358
Log:
[CXF-803] apply patch provided by Jeff Yu
Added:
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/InFaultInterceptors.java
(with props)
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/InInterceptors.java
(with props)
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/OutFaultInterceptors.java
(with props)
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/OutInterceptors.java
(with props)
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AnnotationInterceptors.java
(with props)
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/AnnotationInterceptorTest.java
(with props)
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/HelloService.java
(with props)
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/SayHiInterface.java
(with props)
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/Test2Interceptor.java
(with props)
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/TestInterceptor.java
(with props)
Modified:
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/Messages.properties
incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/ServerFactoryBean.java
Added:
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/InFaultInterceptors.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/InFaultInterceptors.java?view=auto&rev=559358
==============================================================================
---
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/InFaultInterceptors.java
(added)
+++
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/InFaultInterceptors.java
Wed Jul 25 01:48:45 2007
@@ -0,0 +1,32 @@
+/**
+ * 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.interceptor;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
[EMAIL PROTECTED](ElementType.TYPE)
[EMAIL PROTECTED](RetentionPolicy.RUNTIME)
+public @interface InFaultInterceptors {
+
+ String[] interceptors();
+}
Propchange:
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/InFaultInterceptors.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/InFaultInterceptors.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added:
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/InInterceptors.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/InInterceptors.java?view=auto&rev=559358
==============================================================================
---
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/InInterceptors.java
(added)
+++
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/InInterceptors.java
Wed Jul 25 01:48:45 2007
@@ -0,0 +1,34 @@
+/**
+ * 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.interceptor;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+
[EMAIL PROTECTED](ElementType.TYPE)
[EMAIL PROTECTED](RetentionPolicy.RUNTIME)
+public @interface InInterceptors {
+
+ String[] interceptors();
+
+}
Propchange:
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/InInterceptors.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/InInterceptors.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added:
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/OutFaultInterceptors.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/OutFaultInterceptors.java?view=auto&rev=559358
==============================================================================
---
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/OutFaultInterceptors.java
(added)
+++
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/OutFaultInterceptors.java
Wed Jul 25 01:48:45 2007
@@ -0,0 +1,32 @@
+/**
+ * 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.interceptor;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
[EMAIL PROTECTED](ElementType.TYPE)
[EMAIL PROTECTED](RetentionPolicy.RUNTIME)
+public @interface OutFaultInterceptors {
+
+ String[] interceptors();
+}
Propchange:
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/OutFaultInterceptors.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/OutFaultInterceptors.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added:
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/OutInterceptors.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/OutInterceptors.java?view=auto&rev=559358
==============================================================================
---
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/OutInterceptors.java
(added)
+++
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/OutInterceptors.java
Wed Jul 25 01:48:45 2007
@@ -0,0 +1,34 @@
+/**
+ * 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.interceptor;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+
[EMAIL PROTECTED](ElementType.TYPE)
[EMAIL PROTECTED](RetentionPolicy.RUNTIME)
+public @interface OutInterceptors {
+
+ String[] interceptors();
+
+}
Propchange:
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/OutInterceptors.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/OutInterceptors.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added:
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AnnotationInterceptors.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AnnotationInterceptors.java?view=auto&rev=559358
==============================================================================
---
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AnnotationInterceptors.java
(added)
+++
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AnnotationInterceptors.java
Wed Jul 25 01:48:45 2007
@@ -0,0 +1,127 @@
+/**
+ * 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.interceptor;
+
+import java.lang.annotation.Annotation;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.ResourceBundle;
+
+import javax.jws.WebService;
+
+import org.apache.cxf.common.classloader.ClassLoaderUtils;
+import org.apache.cxf.common.i18n.BundleUtils;
+import org.apache.cxf.common.i18n.Message;
+import org.apache.cxf.common.util.StringUtils;
+import org.apache.cxf.endpoint.EndpointException;
+
+public class AnnotationInterceptors {
+
+ private static final ResourceBundle BUNDLE =
BundleUtils.getBundle(AnnotationInterceptors.class);
+
+ private Class<?> clazz;
+
+ public AnnotationInterceptors(Class<?> clz) {
+ clazz = clz;
+ }
+
+ public List<Interceptor> getInFaultInterceptors() throws EndpointException
{
+ return getInterceptors(InFaultInterceptors.class);
+ }
+
+ @SuppressWarnings (value = "unchecked")
+ private List<Interceptor> getInterceptors(Class clz) throws
EndpointException {
+ Annotation annotation = clazz.getAnnotation(clz);
+ if (annotation != null) {
+ return initializeInterceptors(getInterceptorNames(annotation));
+ } else {
+ WebService ws = clazz.getAnnotation(WebService.class);
+ if (ws != null && !StringUtils.isEmpty(ws.endpointInterface())) {
+ String seiClassName = ws.endpointInterface().trim();
+ Class seiClass = null;
+ try {
+ seiClass = ClassLoaderUtils.loadClass(seiClassName,
this.getClass());
+ } catch (ClassNotFoundException e) {
+ throw new RuntimeException("couldnt find class :" +
seiClass, e);
+ }
+ annotation = seiClass.getAnnotation(clz);
+ if (annotation != null) {
+ return
initializeInterceptors(getInterceptorNames(annotation));
+ }
+ }
+ }
+ return new ArrayList<Interceptor>();
+ }
+
+ private String[] getInterceptorNames(Annotation ann) {
+ if (ann instanceof InFaultInterceptors) {
+ return ((InFaultInterceptors)ann).interceptors();
+ } else if (ann instanceof InInterceptors) {
+ return ((InInterceptors)ann).interceptors();
+ } else if (ann instanceof OutFaultInterceptors) {
+ return ((OutFaultInterceptors)ann).interceptors();
+ } else if (ann instanceof OutInterceptors) {
+ return ((OutInterceptors)ann).interceptors();
+ }
+ throw new UnsupportedOperationException("Doesn't support other
annotation for interceptor: " + ann);
+ }
+
+
+ private List<Interceptor> initializeInterceptors(String[] interceptors)
throws EndpointException {
+ List<Interceptor> theInterceptors = new ArrayList<Interceptor>();
+ if (interceptors != null && interceptors.length > 0) {
+ for (String interceptorName : interceptors) {
+ Interceptor interceptor = null;
+ try {
+ interceptor =
(Interceptor)ClassLoaderUtils.loadClass(interceptorName,
+
this.getClass()).newInstance();
+ } catch (ClassNotFoundException e) {
+ throw new EndpointException(new
Message("COULD_NOT_CREATE_ANNOTATION_INTERCEPOTR",
+ BUNDLE, interceptorName),
e);
+ } catch (InstantiationException ie) {
+ throw new EndpointException(new
Message("COULD_NOT_CREATE_ANNOTATION_INTERCEPOTR",
+ BUNDLE, interceptorName),
ie);
+ } catch (IllegalAccessException iae) {
+ throw new EndpointException(new
Message("COULD_NOT_CREATE_ANNOTATION_INTERCEPOTR",
+ BUNDLE, interceptorName),
iae);
+ }
+ if (interceptor != null) {
+ theInterceptors.add(interceptor);
+ }
+ }
+ }
+ return theInterceptors;
+ }
+
+
+ public List<Interceptor> getInInterceptors() throws EndpointException {
+ return getInterceptors(InInterceptors.class);
+ }
+
+ public List<Interceptor> getOutFaultInterceptors() throws
EndpointException {
+ return getInterceptors(OutFaultInterceptors.class);
+ }
+
+
+ public List<Interceptor> getOutInterceptors() throws EndpointException {
+ return getInterceptors(OutInterceptors.class);
+ }
+
+}
Propchange:
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AnnotationInterceptors.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/AnnotationInterceptors.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified:
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/Messages.properties
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/Messages.properties?view=diff&rev=559358&r1=559357&r2=559358
==============================================================================
---
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/Messages.properties
(original)
+++
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/Messages.properties
Wed Jul 25 01:48:45 2007
@@ -32,4 +32,5 @@
WRITE_ATTACHMENTS=Could not write attachments.
INVOKE_FAULT_INFO=Couldn't invoke getFaultInfo method.
NO_FAULT_INFO_METHOD=Custom faults need a getFaultInfo method.
-NO_ACCCESS_FAULT_INFO=Couldn't access getFaultInfo method.
\ No newline at end of file
+NO_ACCCESS_FAULT_INFO=Couldn't access getFaultInfo method.
+COULD_NOT_CREATE_ANNOTATION_INTERCEPOTR=Could not create annotation
interceptor: {0}
\ No newline at end of file
Added:
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/AnnotationInterceptorTest.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/AnnotationInterceptorTest.java?view=auto&rev=559358
==============================================================================
---
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/AnnotationInterceptorTest.java
(added)
+++
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/AnnotationInterceptorTest.java
Wed Jul 25 01:48:45 2007
@@ -0,0 +1,217 @@
+/**
+ * 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.jaxws.service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.jws.WebService;
+
+import org.apache.cxf.frontend.ServerFactoryBean;
+import org.apache.cxf.interceptor.InInterceptors;
+import org.apache.cxf.interceptor.Interceptor;
+import org.apache.cxf.jaxws.AbstractJaxWsTest;
+import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
+import org.junit.Before;
+import org.junit.Test;
+
+public class AnnotationInterceptorTest extends AbstractJaxWsTest {
+
+ private ServerFactoryBean fb;
+
+ private JaxWsServerFactoryBean jfb;
+
+ @Before
+ public void setUp() {
+ fb = new ServerFactoryBean();
+ fb.setAddress("http://localhost");
+ fb.setBus(getBus());
+
+ jfb = new JaxWsServerFactoryBean();
+ jfb.setAddress("http://localhost");
+ jfb.setBus(getBus());
+ }
+
+ @Test
+ public void testSimpleFrontend() throws Exception {
+ fb.setServiceClass(HelloService.class);
+ HelloService hello = new HelloServiceImpl();
+ fb.setServiceBean(hello);
+ fb.create();
+
+ List<Interceptor> interceptors =
fb.getServer().getEndpoint().getInInterceptors();
+ assertTrue(hasTestInterceptor(interceptors));
+ }
+
+ @Test
+ public void testSimpleFrontendWithNoInterceptor() throws Exception {
+ fb.setServiceClass(HelloService.class);
+ HelloService hello = new HelloServiceImplNoAnnotation();
+ fb.setServiceBean(hello);
+ fb.create();
+
+ List<Interceptor> interceptors =
fb.getServer().getEndpoint().getInInterceptors();
+ assertFalse(hasTestInterceptor(interceptors));
+ }
+
+
+ @Test
+ public void testJaxwsFrontendWithNoInterceptor() throws Exception {
+ jfb.setServiceClass(SayHi.class);
+ jfb.setServiceBean(new SayHiNoInterceptor());
+
+ jfb.create();
+ List<Interceptor> interceptors =
jfb.getServer().getEndpoint().getInInterceptors();
+ assertFalse(hasTestInterceptor(interceptors));
+ }
+
+ @Test
+ public void testJaxwsFrontendWithImpl() throws Exception {
+ jfb.setServiceClass(SayHi.class);
+ SayHi implementor = new SayHiImplementation();
+ jfb.setServiceBean(implementor);
+
+ jfb.create();
+ List<Interceptor> interceptors =
jfb.getServer().getEndpoint().getInInterceptors();
+ assertTrue(hasTestInterceptor(interceptors));
+ }
+
+ @Test
+ public void testJaxWsFrontendWithInterceptorInSEI() throws Exception {
+ jfb.setServiceClass(SayHiInterface.class);
+ jfb.setServiceBean(new SayHiInterfaceImpl());
+ jfb.create();
+
+ List<Interceptor> interceptors =
jfb.getServer().getEndpoint().getInInterceptors();
+ assertTrue(hasTestInterceptor(interceptors));
+ }
+
+ @Test
+ public void testJaxWsFrontend() throws Exception {
+ jfb.setServiceClass(SayHiInterface.class);
+ jfb.setServiceBean(new SayHiInterfaceImpl2());
+ jfb.create();
+
+ List<Interceptor> interceptors =
jfb.getServer().getEndpoint().getInInterceptors();
+ assertFalse(hasTestInterceptor(interceptors));
+ assertTrue(hasTest2Interceptor(interceptors));
+ }
+
+
+ private boolean hasTestInterceptor(List<Interceptor> interceptors) {
+ boolean flag = false;
+ for (Interceptor it : interceptors) {
+ if (it instanceof TestInterceptor) {
+ flag = true;
+ }
+ }
+ return flag;
+ }
+
+ private boolean hasTest2Interceptor(List<Interceptor> interceptors) {
+ boolean flag = false;
+ for (Interceptor it : interceptors) {
+ if (it instanceof Test2Interceptor) {
+ flag = true;
+ }
+ }
+ return flag;
+ }
+
+ @InInterceptors(interceptors =
"org.apache.cxf.jaxws.service.TestInterceptor")
+ public class HelloServiceImpl implements HelloService {
+ public String sayHi() {
+ return "HI";
+ }
+ }
+
+ public class HelloServiceImplNoAnnotation implements HelloService {
+ public String sayHi() {
+ return "HI";
+ }
+ }
+
+ @WebService(serviceName = "SayHiService",
+ portName = "HelloPort",
+ targetNamespace = "http://mynamespace.com/",
+ endpointInterface = "org.apache.cxf.jaxws.service.SayHi")
+ @InInterceptors (interceptors =
{"org.apache.cxf.jaxws.service.TestInterceptor" })
+ public class SayHiImplementation implements SayHi {
+ public long sayHi(long arg) {
+ return arg;
+ }
+ public void greetMe() {
+
+ }
+ public String[] getStringArray(String[] strs) {
+ String[] strings = new String[2];
+ strings[0] = "Hello" + strs[0];
+ strings[1] = "Bonjour" + strs[1];
+ return strings;
+ }
+ public List<String> getStringList(List<String> list) {
+ List<String> ret = new ArrayList<String>();
+ ret.add("Hello" + list.get(0));
+ ret.add("Bonjour" + list.get(1));
+ return ret;
+ }
+ }
+
+ @WebService(serviceName = "SayHiService",
+ portName = "HelloPort",
+ targetNamespace = "http://mynamespace.com/",
+ endpointInterface = "org.apache.cxf.jaxws.service.SayHi")
+ public class SayHiNoInterceptor implements SayHi {
+ public long sayHi(long arg) {
+ return arg;
+ }
+ public void greetMe() {
+
+ }
+ public String[] getStringArray(String[] strs) {
+ String[] strings = new String[2];
+ strings[0] = "Hello" + strs[0];
+ strings[1] = "Bonjour" + strs[1];
+ return strings;
+ }
+ public List<String> getStringList(List<String> list) {
+ List<String> ret = new ArrayList<String>();
+ ret.add("Hello" + list.get(0));
+ ret.add("Bonjour" + list.get(1));
+ return ret;
+ }
+ }
+
+ @WebService(endpointInterface =
"org.apache.cxf.jaxws.service.SayHiInterface")
+ public class SayHiInterfaceImpl implements SayHiInterface {
+ public String sayHi(String s) {
+ return "HI";
+ }
+ }
+
+ @WebService(endpointInterface =
"org.apache.cxf.jaxws.service.SayHiInterface")
+ @InInterceptors (interceptors =
"org.apache.cxf.jaxws.service.Test2Interceptor")
+ public class SayHiInterfaceImpl2 implements SayHiInterface {
+ public String sayHi(String s) {
+ return "HI";
+ }
+ }
+
+
+}
Propchange:
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/AnnotationInterceptorTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/AnnotationInterceptorTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added:
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/HelloService.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/HelloService.java?view=auto&rev=559358
==============================================================================
---
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/HelloService.java
(added)
+++
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/HelloService.java
Wed Jul 25 01:48:45 2007
@@ -0,0 +1,23 @@
+/**
+ * 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.jaxws.service;
+
+public interface HelloService {
+ String sayHi();
+}
Propchange:
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/HelloService.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/HelloService.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added:
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/SayHiInterface.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/SayHiInterface.java?view=auto&rev=559358
==============================================================================
---
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/SayHiInterface.java
(added)
+++
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/SayHiInterface.java
Wed Jul 25 01:48:45 2007
@@ -0,0 +1,34 @@
+/**
+ * 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.jaxws.service;
+
+import javax.jws.WebMethod;
+import javax.jws.WebService;
+import javax.jws.soap.SOAPBinding;
+
+import org.apache.cxf.interceptor.InInterceptors;
+
[EMAIL PROTECTED](style = SOAPBinding.Style.RPC, use = SOAPBinding.Use.LITERAL)
[EMAIL PROTECTED](name = "Hello", targetNamespace = "http://mynamespace.com/")
[EMAIL PROTECTED] (interceptors =
"org.apache.cxf.jaxws.service.TestInterceptor")
+public interface SayHiInterface {
+
+ @WebMethod(operationName = "sayHi", exclude = false)
+ String sayHi(String s);
+}
Propchange:
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/SayHiInterface.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/SayHiInterface.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added:
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/Test2Interceptor.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/Test2Interceptor.java?view=auto&rev=559358
==============================================================================
---
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/Test2Interceptor.java
(added)
+++
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/Test2Interceptor.java
Wed Jul 25 01:48:45 2007
@@ -0,0 +1,36 @@
+/**
+ * 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.jaxws.service;
+
+import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.AbstractPhaseInterceptor;
+import org.apache.cxf.phase.Phase;
+
+public class Test2Interceptor extends AbstractPhaseInterceptor {
+
+ public Test2Interceptor() {
+ super(Phase.SEND);
+ }
+
+ public void handleMessage(Message message) {
+ System.out.println("Handle Message in Test2Interceptor");
+ }
+
+}
Propchange:
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/Test2Interceptor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/Test2Interceptor.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added:
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/TestInterceptor.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/TestInterceptor.java?view=auto&rev=559358
==============================================================================
---
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/TestInterceptor.java
(added)
+++
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/TestInterceptor.java
Wed Jul 25 01:48:45 2007
@@ -0,0 +1,36 @@
+/**
+ * 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.jaxws.service;
+
+import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.AbstractPhaseInterceptor;
+import org.apache.cxf.phase.Phase;
+
+public class TestInterceptor extends AbstractPhaseInterceptor {
+
+ public TestInterceptor() {
+ super(Phase.SEND);
+ }
+
+ public void handleMessage(Message message) {
+ System.out.println("Handle Message in TestInterceptor");
+ }
+
+}
Propchange:
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/TestInterceptor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/service/TestInterceptor.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified:
incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/ServerFactoryBean.java
URL:
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/ServerFactoryBean.java?view=diff&rev=559358&r1=559357&r2=559358
==============================================================================
---
incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/ServerFactoryBean.java
(original)
+++
incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/ServerFactoryBean.java
Wed Jul 25 01:48:45 2007
@@ -26,7 +26,6 @@
import java.util.logging.Logger;
import javax.xml.transform.dom.DOMSource;
-
import org.w3c.dom.Document;
import org.apache.cxf.BusException;
@@ -40,6 +39,7 @@
import org.apache.cxf.endpoint.ServerImpl;
import org.apache.cxf.feature.AbstractFeature;
import org.apache.cxf.helpers.DOMUtils;
+import org.apache.cxf.interceptor.AnnotationInterceptors;
import org.apache.cxf.jaxb.JAXBDataBinding;
import org.apache.cxf.resource.ResourceManager;
import org.apache.cxf.resource.URIResolver;
@@ -48,6 +48,7 @@
import org.apache.cxf.service.invoker.BeanInvoker;
import org.apache.cxf.service.invoker.Invoker;
+
/**
* This class helps take a [EMAIL PROTECTED] org.apache.cxf.service.Service}
and
* expose as a server side endpoint.
@@ -118,6 +119,10 @@
ep.getService().setInvoker(invoker);
}
+ if (getServiceBean() != null) {
+ initializeAnnotationInterceptors(ep);
+ }
+
if (start) {
server.start();
}
@@ -190,6 +195,35 @@
((JAXBDataBinding)dataBinding).setExtraClass(extraClass);
}
}
+ }
+
+ protected void initializeAnnotationInterceptors(Endpoint ep) throws
EndpointException {
+ Object implementor = getServiceBean();
+ if (initializeAnnotationInterceptors(ep, implementor.getClass())) {
+ LOG.fine("added annotation based interceptors");
+ }
+ }
+
+ protected boolean initializeAnnotationInterceptors(Endpoint ep, Class<?>
clazz) throws EndpointException {
+ boolean hasAnnotation = false;
+ AnnotationInterceptors provider = new AnnotationInterceptors(clazz);
+ if (provider.getInFaultInterceptors().size() > 0) {
+
ep.getInFaultInterceptors().addAll(provider.getInFaultInterceptors());
+ hasAnnotation = true;
+ }
+ if (provider.getInInterceptors().size() > 0) {
+ ep.getInInterceptors().addAll(provider.getInInterceptors());
+ hasAnnotation = true;
+ }
+ if (provider.getOutFaultInterceptors().size() > 0) {
+
ep.getOutFaultInterceptors().addAll(provider.getOutFaultInterceptors());
+ hasAnnotation = true;
+ }
+ if (provider.getOutInterceptors().size() > 0) {
+ ep.getOutInterceptors().addAll(provider.getOutInterceptors());
+ hasAnnotation = true;
+ }
+ return hasAnnotation;
}
protected Invoker createInvoker() {