cxf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andrea Smyth <andrea.sm...@iona.com>
Subject Re: svn commit: r450934 - in /incubator/cxf/trunk: rt/frontend/jaxws/ rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/ rt/frontend/jaxws/src/main/resources/META-INF/cxf/ rt/frontend/jaxws/
Date Fri, 29 Sep 2006 16:15:23 GMT
I had seen it in Appendix B of the Proposed Final Draft (Version 0.9.2
from Dec 8, 2004) - but I just checked it's also in the final release
(Version 1.0 from June 1, 2005).

Liu, Jervis wrote:

>Hi Andrea, what spec says the schema for @HandlerChain annotations should comply with name space http://www.bea.com/xml/ns/jws? I do not find this info either in jax-ws spec or in JSR 181. 
>
>Thanks,
>Jervis
>
>
>-----Original Message-----
>From:	Smyth, Andrea
>Sent:	9/29/2006 (星期五) 10:57 下午
>To:	cxf-dev@incubator.apache.org
>Cc:	
>Subject:	Re: svn commit: r450934 - in /incubator/cxf/trunk: rt/frontend/jaxws/ rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/ rt/frontend/jaxws/src/main/resources/META-INF/cxf/ rt/frontend/jaxws/
>
>Liu, Jervis wrote:
>
>  
>
>>Hi Andrea, thanks for pointing this out. I am actually working on this to replace @HandlerChain file schema with the handler schema specified in JSR181, the code I checked in using spring bean just a temporary short cut to make whole things working first.
>>
>>However one thing I am not sure is where you got this javaee_web_services_1_2.xsd. It is very similiar to handler schema in JSR181, but with some minor differences, for example, there is no <xsd:element name="handler-chains"> defined in javaee_web_services_1_2.xsd. Are we supposed to use javaee_web_services_1_2.xsd as the handler schema or we should create a handler.xsd by ourself using content copied from jsr181 spec?
>> 
>>
>>    
>>
>Hi Jervis,
>
>I downloaded all javaee*.xsd from http://java.sun.com/xml/ns/javaee/
>The schema that should be used to support @HandlerChain annotations  is 
>the one with namespace http://www.bea.com/xml/ns/jws. Unfortunately I 
>could not find it online (but I did not look too hard) - c&p it from the 
>JSR 181 spec would be the next best option (Appendix B).  The root 
>element of a handler chain config file should be of type 
>jms:handler-configType xmlns:jws=http://www.bea.com/xml/ns/jws.
>
>Andrea.
>
>  
>
>>Thanks,
>>Jervis
>>
>>
>> 
>>
>>    
>>
>>>-----Original Message-----
>>>From: Smyth, Andrea 
>>>Sent: Friday, September 29, 2006 9:55 PM
>>>To: cxf-dev@incubator.apache.org
>>>Subject: Re: svn commit: r450934 - in /incubator/cxf/trunk:
>>>rt/frontend/jaxws/ 
>>>rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/
>>>rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/
>>>rt/frontend/jaxws/src/main/resources/META-INF/cxf/ rt/frontend/jaxws/
>>>
>>>
>>>Some comments on this commit:
>>>
>>>The files referenced by the @HandlerChain annotation cannot be Spring 
>>>bean config files - according to JSR 181 they should comply 
>>>with schema 
>>>http://www.bea.com/xml/ns.jws. That does not mean that the 
>>>types defined 
>>>there and in the javaee* schemas can't be used for bean 
>>>properties but 
>>>that's another issue (i.e. a question of whether the 
>>>JaxwsEndpointImpl 
>>>class should have a configurable property of this type, that would be 
>>>used if no @HandlerChain annotation is present or else would 
>>>supersede 
>>>such an annotation annotation).
>>>
>>>Introducing direct Spring  dependencies in the jaxws  
>>>implementation is 
>>>not a good idea IMO. So far, the use of Spring is entirely 
>>>encapsulated 
>>>in the implementations of the bus and/or the Configurer 
>>>interfaces, and 
>>>I think it should stay that way.
>>>
>>>Also, I think it is good practice to leave third party schemas 
>>>(javaee_web_services_1_2.xsd)  unchanged. Using external 
>>>binding files 
>>>and/or importing them in other schemas should normally be sufficient.
>>>
>>>Andrea.
>>>
>>>
>>>jliu@apache.org wrote:
>>>
>>>   
>>>
>>>      
>>>
>>>>Author: jliu
>>>>Date: Thu Sep 28 10:33:57 2006
>>>>New Revision: 450934
>>>>
>>>>URL: http://svn.apache.org/viewvc?view=rev&rev=450934
>>>>Log:
>>>>[CXF-105] The HandlerChain annotation processing in the 
>>>>     
>>>>
>>>>        
>>>>
>>>JAX-WS frontend. 
>>>   
>>>
>>>      
>>>
>>>>Added:
>>>>  
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache
>>>/cxf/jaxws/handler/AnnotationHandlerChainBuilder.java   (with props)
>>>   
>>>
>>>      
>>>
>>>>  
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache
>>>/cxf/jaxws/handler/HandlerChainBuilder.java   (with props)
>>>   
>>>
>>>      
>>>
>>>>  
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/main/resources/META-
>>>INF/cxf/cxf-property-editors.xml   (with props)
>>>   
>>>
>>>      
>>>
>>>>  
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache
>>>/cxf/jaxws/handler/AnnotationHandlerChainBuilderTest.java   
>>>(with props)
>>>   
>>>
>>>      
>>>
>>>>  
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache
>>>/cxf/jaxws/handler/HandlerChainBuilderTest.java   (with props)
>>>   
>>>
>>>      
>>>
>>>>  incubator/cxf/trunk/rt/frontend/jaxws/src/test/resources/
>>>>  
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/test/resources/handl
>>>ers.xml   (with props)
>>>   
>>>
>>>      
>>>
>>>>Modified:
>>>>  incubator/cxf/trunk/rt/frontend/jaxws/pom.xml
>>>>  
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache
>>>/cxf/jaxws/EndpointImpl.java
>>>   
>>>
>>>      
>>>
>>>>  
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache
>>>/cxf/jaxws/handler/Messages.properties
>>>   
>>>
>>>      
>>>
>>>>  
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/main/resources/schem
>>>as/configuration/javaee_web_services_1_2.xsd
>>>   
>>>
>>>      
>>>
>>>>  
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/syst
>>>est/handlers/HandlerTestImpl.java
>>>   
>>>
>>>      
>>>
>>>>  
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/syst
>>>est/handlers/handlers.xml
>>>   
>>>
>>>      
>>>
>>>>Modified: incubator/cxf/trunk/rt/frontend/jaxws/pom.xml
>>>>URL: 
>>>>     
>>>>
>>>>        
>>>>
>>>http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/j
>>>axws/pom.xml?view=diff&rev=450934&r1=450933&r2=450934
>>>   
>>>
>>>      
>>>
>>>>=============================================================
>>>>     
>>>>
>>>>        
>>>>
>>>=================
>>>   
>>>
>>>      
>>>
>>>>--- incubator/cxf/trunk/rt/frontend/jaxws/pom.xml (original)
>>>>+++ incubator/cxf/trunk/rt/frontend/jaxws/pom.xml Thu Sep 28 
>>>>     
>>>>
>>>>        
>>>>
>>>10:33:57 2006
>>>   
>>>
>>>      
>>>
>>>>@@ -117,6 +117,10 @@
>>>>				<xsdOption>
>>>>				    
>>>>     
>>>>
>>>>        
>>>>
>>><xsd>${basedir}/src/main/resources/schemas/configuration/javae
>>>e_web_services_1_2.xsd</xsd>
>>>   
>>>
>>>      
>>>
>>>>				    
>>>>     
>>>>
>>>>        
>>>>
>>><bindingFile>${basedir}/src/main/resources/schemas/configurati
>>>on/javaee_5.xjb</bindingFile>
>>>   
>>>
>>>      
>>>
>>>>+                                    <extension>true</extension>
>>>>+                                    <extensionArgs>
>>>>+                                        
>>>>     
>>>>
>>>>        
>>>>
>>><extensionArg>-Xcfg</extensionArg>
>>>   
>>>
>>>      
>>>
>>>>+                                    </extensionArgs>
>>>>				</xsdOption>
>>>>			    </xsdOptions>
>>>>			</configuration>
>>>>@@ -125,6 +129,23 @@
>>>>			</goals>
>>>>		    </execution>
>>>>		</executions>
>>>>+                <dependencies>
>>>>+                    <dependency>
>>>>+                        <groupId>org.apache.cxf</groupId>
>>>>+                        <artifactId>cxf-tools-xjc-cfg</artifactId>
>>>>+                        <version>${project.version}</version>
>>>>+                    </dependency>
>>>>+                    <dependency>
>>>>+                        <groupId>org.apache.cxf</groupId>
>>>>+                        <artifactId>cxf-tools-xjc-dv</artifactId>
>>>>+                        <version>${project.version}</version>
>>>>+                    </dependency>
>>>>+                    <dependency>
>>>>+                        <groupId>org.apache.cxf</groupId>
>>>>+                        
>>>>     
>>>>
>>>>        
>>>>
>>><artifactId>cxf-common-utilities</artifactId>
>>>   
>>>
>>>      
>>>
>>>>+                        <version>${project.version}</version>
>>>>+                    </dependency>
>>>>+                </dependencies>
>>>>	    </plugin>
>>>>	</plugins>
>>>>   </build>
>>>>
>>>>Modified: 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache
>>>/cxf/jaxws/EndpointImpl.java
>>>   
>>>
>>>      
>>>
>>>>URL: 
>>>>     
>>>>
>>>>        
>>>>
>>>http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/j
>>>axws/src/main/java/org/apache/cxf/jaxws/EndpointImpl.java?view
>>>=diff&rev=450934&r1=450933&r2=450934
>>>   
>>>
>>>      
>>>
>>>>=============================================================
>>>>     
>>>>
>>>>        
>>>>
>>>=================
>>>   
>>>
>>>      
>>>
>>>>--- 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache
>>>/cxf/jaxws/EndpointImpl.java (original)
>>>   
>>>
>>>      
>>>
>>>>+++ 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache
>>>/cxf/jaxws/EndpointImpl.java Thu Sep 28 10:33:57 2006
>>>   
>>>
>>>      
>>>
>>>>@@ -32,6 +32,7 @@
>>>>import javax.xml.ws.Binding;
>>>>import javax.xml.ws.Provider;
>>>>import javax.xml.ws.WebServiceException;
>>>>+import javax.xml.ws.handler.Handler;
>>>>
>>>>import org.apache.cxf.Bus;
>>>>import org.apache.cxf.BusException;
>>>>@@ -43,6 +44,8 @@
>>>>import org.apache.cxf.jaxb.JAXBDataReaderFactory;
>>>>import org.apache.cxf.jaxb.JAXBDataWriterFactory;
>>>>import org.apache.cxf.jaxws.context.WebContextResourceResolver;
>>>>+import org.apache.cxf.jaxws.handler.AnnotationHandlerChainBuilder;
>>>>+//import org.apache.cxf.jaxws.javaee.HandlerChainType;
>>>>import org.apache.cxf.jaxws.support.JaxWsEndpointImpl;
>>>>import org.apache.cxf.jaxws.support.JaxWsImplementorInfo;
>>>>import org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean;
>>>>@@ -56,7 +59,7 @@
>>>>import org.apache.cxf.wsdl.EndpointReferenceUtils;
>>>>
>>>>public class EndpointImpl extends javax.xml.ws.Endpoint {
>>>>- 
>>>>+
>>>>   private static final Logger LOG = 
>>>>     
>>>>
>>>>        
>>>>
>>>LogUtils.getL7dLogger(JaxWsServiceFactoryBean.class);
>>>   
>>>
>>>      
>>>
>>>>   private static final ResourceBundle BUNDLE = 
>>>>     
>>>>
>>>>        
>>>>
>>>LOG.getResourceBundle();
>>>   
>>>
>>>      
>>>
>>>>@@ -69,7 +72,7 @@
>>>>   private Service service;
>>>>   private JaxWsEndpointImpl endpoint;
>>>>   private JaxWsImplementorInfo implInfo;
>>>>-    
>>>>+
>>>>   @SuppressWarnings("unchecked")
>>>>   public EndpointImpl(Bus b, Object i, String uri) {
>>>>       bus = b;
>>>>@@ -77,7 +80,7 @@
>>>>       // bindingURI = uri;
>>>>       // build up the Service model
>>>>       implInfo = new JaxWsImplementorInfo(implementor.getClass());
>>>>-        
>>>>+
>>>>       AbstractServiceFactoryBean serviceFactory;
>>>>       if (implInfo.isWebServiceProvider()) {
>>>>           serviceFactory = new 
>>>>     
>>>>
>>>>        
>>>>
>>>ProviderServiceFactoryBean(implInfo);
>>>   
>>>
>>>      
>>>
>>>>@@ -94,26 +97,26 @@
>>>>       if (ei == null) {
>>>>           throw new NullPointerException("Could not find 
>>>>     
>>>>
>>>>        
>>>>
>>>endpoint " + endpointName + " in Service.");
>>>   
>>>
>>>      
>>>
>>>>       }
>>>>- 
>>>>+
>>>>       // revisit: should get enableSchemaValidation from 
>>>>     
>>>>
>>>>        
>>>>
>>>configuration
>>>   
>>>
>>>      
>>>
>>>>       if (false) {
>>>>           addSchemaValidation();
>>>>       }
>>>>-        
>>>>+
>>>>       if (implInfo.isWebServiceProvider()) {
>>>>           service.setInvoker(new ProviderInvoker((Provider<?>)i));
>>>>       } else {
>>>>           service.setInvoker(new JAXWSMethodInvoker(i));
>>>>       }
>>>>-        
>>>>+
>>>>       //      TODO: use bindigURI     
>>>>       try {
>>>>-            endpoint = new JaxWsEndpointImpl(bus, service, 
>>>>     
>>>>
>>>>        
>>>>
>>>ei);            
>>>   
>>>
>>>      
>>>
>>>>+            endpoint = new JaxWsEndpointImpl(bus, service, ei);
>>>>       } catch (EndpointException e) {
>>>>           throw new WebServiceException(e);
>>>>       }
>>>>       configureObject(endpoint);
>>>>-        
>>>>+
>>>>       doInit = true;
>>>>   }
>>>>
>>>>@@ -183,7 +186,6 @@
>>>>   public ServerImpl getServer() {
>>>>       return server;
>>>>   }
>>>>-    
>>>>
>>>>   /**
>>>>    * inject resources into servant.  The resources are injected
>>>>@@ -204,11 +206,11 @@
>>>>
>>>>   protected void doPublish(String address) {
>>>>       init();
>>>>-        
>>>>+
>>>>       if (null != address) {
>>>>           endpoint.getEndpointInfo().setAddress(address);
>>>>       }
>>>>-        
>>>>+
>>>>       try {
>>>>           MessageObserver observer;
>>>>           if (implInfo.isWebServiceProvider()) {
>>>>@@ -216,7 +218,7 @@
>>>>           } else {
>>>>               observer = new 
>>>>     
>>>>
>>>>        
>>>>
>>>ChainInitiationObserver(endpoint, bus);
>>>   
>>>
>>>      
>>>
>>>>           }
>>>>-     
>>>>+
>>>>           server = new ServerImpl(bus, endpoint, observer);
>>>>           server.start();
>>>>       } catch (BusException ex) {
>>>>@@ -225,25 +227,25 @@
>>>>           throw new 
>>>>     
>>>>
>>>>        
>>>>
>>>WebServiceException(BUNDLE.getString("FAILED_TO_PUBLISH_ENDPOI
>>>NT_EXC"), ex);
>>>   
>>>
>>>      
>>>
>>>>       }
>>>>   }
>>>>-    
>>>>+
>>>>   org.apache.cxf.endpoint.Endpoint getEndpoint() {
>>>>       return endpoint;
>>>>   }
>>>>-    
>>>>+
>>>>   private void configureObject(Object instance) {
>>>>       Configurer configurer = bus.getExtension(Configurer.class);
>>>>       if (null != configurer) {
>>>>           configurer.configureBean(instance);
>>>>       }
>>>>   }
>>>>-    
>>>>+
>>>>   private void addSchemaValidation() {
>>>>       Schema schema = 
>>>>     
>>>>
>>>>        
>>>>
>>>EndpointReferenceUtils.getSchema(service.getServiceInfo());
>>>   
>>>
>>>      
>>>
>>>>-        
>>>>+
>>>>       if (service.getDataBinding().getDataReaderFactory() 
>>>>     
>>>>
>>>>        
>>>>
>>>instanceof JAXBDataReaderFactory) {
>>>   
>>>
>>>      
>>>
>>>>           
>>>>     
>>>>
>>>>        
>>>>
>>>((JAXBDataReaderFactory)service.getDataBinding().getDataReader
>>>Factory()).setSchema(schema);
>>>   
>>>
>>>      
>>>
>>>>       }
>>>>-        
>>>>+
>>>>       if (service.getDataBinding().getDataWriterFactory() 
>>>>     
>>>>
>>>>        
>>>>
>>>instanceof JAXBDataWriterFactory) {
>>>   
>>>
>>>      
>>>
>>>>           
>>>>     
>>>>
>>>>        
>>>>
>>>((JAXBDataWriterFactory)service.getDataBinding().getDataWriter
>>>Factory()).setSchema(schema);
>>>   
>>>
>>>      
>>>
>>>>       }
>>>>@@ -253,15 +255,36 @@
>>>>       if (doInit) {
>>>>           try {
>>>>               injectResources(implementor);
>>>>-    
>>>>+                configureHandlers();
>>>>+
>>>>           } catch (Exception ex) {
>>>>               ex.printStackTrace();
>>>>-                if (ex instanceof WebServiceException) { 
>>>>-                    throw (WebServiceException)ex; 
>>>>+                if (ex instanceof WebServiceException) {
>>>>+                    throw (WebServiceException)ex;
>>>>               }
>>>>               throw new WebServiceException("Creation of 
>>>>     
>>>>
>>>>        
>>>>
>>>Endpoint failed", ex);
>>>   
>>>
>>>      
>>>
>>>>           }
>>>>       }
>>>>       doInit = false;
>>>>+    }
>>>>+
>>>>+    /**
>>>>+     * Obtain handler chain from configuration first. If 
>>>>     
>>>>
>>>>        
>>>>
>>>none is specified,
>>>   
>>>
>>>      
>>>
>>>>+     * default to the chain configured in the code, i.e. in 
>>>>     
>>>>
>>>>        
>>>>
>>>annotations.
>>>   
>>>
>>>      
>>>
>>>>+     *
>>>>+     */
>>>>+    private void configureHandlers() {
>>>>+        LOG.fine("loading handler chain for endpoint");
>>>>+        AnnotationHandlerChainBuilder builder = new 
>>>>     
>>>>
>>>>        
>>>>
>>>AnnotationHandlerChainBuilder();
>>>   
>>>
>>>      
>>>
>>>>+
>>>>+        //TBD: get configuratoin from config file
>>>>+        //List<Handler> chain = 
>>>>     
>>>>
>>>>        
>>>>
>>>builder.buildHandlerChainFromConfiguration(hc);
>>>   
>>>
>>>      
>>>
>>>>+        
>>>>     
>>>>
>>>>        
>>>>
>>>//builder.setHandlerInitEnabled(configuration.getBoolean(ENABL
>>>   
>>>
>>>      
>>>
>>E_HANDLER_INIT));
>> 
>>
>>    
>>
>>>>+        List<Handler> chain = null;
>>>>+
>>>>+        if (null == chain || chain.size() == 0) {
>>>>+            chain = 
>>>>     
>>>>
>>>>        
>>>>
>>>builder.buildHandlerChainFromClass(implementor.getClass());
>>>   
>>>
>>>      
>>>
>>>>+        }
>>>>+        getBinding().setHandlerChain(chain);
>>>>   }
>>>>}
>>>>
>>>>Added: 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache
>>>/cxf/jaxws/handler/AnnotationHandlerChainBuilder.java
>>>   
>>>
>>>      
>>>
>>>>URL: 
>>>>     
>>>>
>>>>        
>>>>
>>>http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/j
>>>axws/src/main/java/org/apache/cxf/jaxws/handler/AnnotationHand
>>>lerChainBuilder.java?view=auto&rev=450934
>>>   
>>>
>>>      
>>>
>>>>=============================================================
>>>>     
>>>>
>>>>        
>>>>
>>>=================
>>>   
>>>
>>>      
>>>
>>>>--- 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache
>>>/cxf/jaxws/handler/AnnotationHandlerChainBuilder.java (added)
>>>   
>>>
>>>      
>>>
>>>>+++ 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache
>>>/cxf/jaxws/handler/AnnotationHandlerChainBuilder.java Thu Sep 
>>>28 10:33:57 2006
>>>   
>>>
>>>      
>>>
>>>>@@ -0,0 +1,156 @@
>>>>+/**
>>>>+ * 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.handler;
>>>>+
>>>>+import java.util.ArrayList;
>>>>+import java.util.List;
>>>>+import java.util.ResourceBundle;
>>>>+import java.util.logging.Level;
>>>>+import java.util.logging.Logger;
>>>>+
>>>>+import javax.jws.HandlerChain;
>>>>+import javax.xml.ws.WebServiceException;
>>>>+import javax.xml.ws.handler.Handler;
>>>>+
>>>>+import org.apache.cxf.Bus;
>>>>+import org.apache.cxf.common.logging.LogUtils;
>>>>+import org.apache.cxf.configuration.Configurer;
>>>>+import org.apache.cxf.configuration.spring.ConfigurerImpl;
>>>>+import 
>>>>     
>>>>
>>>>        
>>>>
>>>org.apache.cxf.configuration.spring.JaxbClassPathXmlApplicatio
>>>nContext;
>>>   
>>>
>>>      
>>>
>>>>+import org.apache.cxf.jaxws.javaee.HandlerChainType;
>>>>+import org.apache.cxf.jaxws.javaee.HandlerConfigBean;
>>>>+import org.springframework.context.ApplicationContext;
>>>>+
>>>>+public class AnnotationHandlerChainBuilder extends 
>>>>     
>>>>
>>>>        
>>>>
>>>HandlerChainBuilder {
>>>   
>>>
>>>      
>>>
>>>>+
>>>>+    private static final Logger LOG = 
>>>>     
>>>>
>>>>        
>>>>
>>>LogUtils.getL7dLogger(AnnotationHandlerChainBuilder.class);
>>>   
>>>
>>>      
>>>
>>>>+    private static final ResourceBundle BUNDLE = 
>>>>     
>>>>
>>>>        
>>>>
>>>LOG.getResourceBundle();
>>>   
>>>
>>>      
>>>
>>>>+
>>>>+    public AnnotationHandlerChainBuilder() {
>>>>+    }
>>>>+
>>>>+    public AnnotationHandlerChainBuilder(Bus bus) {
>>>>+        super(bus);
>>>>+    }
>>>>+
>>>>+    /**
>>>>+     * @param clz
>>>>+     * @param existingHandlers
>>>>+     * @return
>>>>+     */
>>>>+    public List<Handler> 
>>>>     
>>>>
>>>>        
>>>>
>>>buildHandlerChainFromClass(Class<?> clz, List<Handler> 
>>>existingHandlers) {
>>>   
>>>
>>>      
>>>
>>>>+
>>>>+        LOG.fine("building handler chain");
>>>>+        HandlerChainAnnotation hcAnn = 
>>>>     
>>>>
>>>>        
>>>>
>>>findHandlerChainAnnotation(clz);
>>>   
>>>
>>>      
>>>
>>>>+        List<Handler> chain = null;
>>>>+        if (hcAnn == null) {
>>>>+            LOG.fine("no HandlerChain annotation on " + clz);
>>>>+            chain = new ArrayList<Handler>();
>>>>+        } else {
>>>>+            hcAnn.validate();
>>>>+            String handlerFile = hcAnn.getFileName();
>>>>+
>>>>+            // This Configurer needs to be different from 
>>>>     
>>>>
>>>>        
>>>>
>>>system configurer as
>>>   
>>>
>>>      
>>>
>>>>+            // it is only aware of handler configure file.
>>>>+            ApplicationContext ac = new 
>>>>     
>>>>
>>>>        
>>>>
>>>JaxbClassPathXmlApplicationContext(new String[] {
>>>   
>>>
>>>      
>>>
>>>>+                handlerFile,
>>>>+                "META-INF/cxf/cxf-property-editors.xml"});
>>>>+            Configurer configurer = new ConfigurerImpl(ac);
>>>>+
>>>>+            HandlerConfigBean hcb = new HandlerConfigBean();
>>>>+            configurer.configureBean(hcb);
>>>>+            HandlerChainType hc = hcb.getJaxwshandler();
>>>>+
>>>>+            if (null == hc) {
>>>>+                throw new 
>>>>     
>>>>
>>>>        
>>>>
>>>WebServiceException(BUNDLE.getString("CHAIN_NOT_SPECIFIED_EXC"));
>>>   
>>>
>>>      
>>>
>>>>+            }
>>>>+
>>>>+            chain = buildHandlerChain(hc, clz.getClassLoader());
>>>>+        }
>>>>+        assert chain != null;
>>>>+        if (existingHandlers != null) {
>>>>+            chain.addAll(existingHandlers);
>>>>+        }
>>>>+        return sortHandlers(chain);
>>>>+    }
>>>>+
>>>>+    public List<Handler> buildHandlerChainFromClass(Class<?> clz) {
>>>>+        return buildHandlerChainFromClass(clz, null);
>>>>+    }
>>>>+
>>>>+    private HandlerChainAnnotation 
>>>>     
>>>>
>>>>        
>>>>
>>>findHandlerChainAnnotation(Class<?> clz) {
>>>   
>>>
>>>      
>>>
>>>>+
>>>>+        HandlerChain ann = clz.getAnnotation(HandlerChain.class);
>>>>+        Class<?> declaringClass = clz;
>>>>+
>>>>+        if (ann == null) {
>>>>+            for (Class<?> iface : clz.getInterfaces()) {
>>>>+                if (LOG.isLoggable(Level.FINE)) {
>>>>+                    LOG.fine("checking for HandlerChain 
>>>>     
>>>>
>>>>        
>>>>
>>>annotation on " + iface.getName());
>>>   
>>>
>>>      
>>>
>>>>+                }
>>>>+                ann = iface.getAnnotation(HandlerChain.class);
>>>>+                if (ann != null) {
>>>>+                    declaringClass = iface;
>>>>+                    break;
>>>>+                }
>>>>+            }
>>>>+        }
>>>>+        if (ann != null) {
>>>>+            return new HandlerChainAnnotation(ann, declaringClass);
>>>>+        } else {
>>>>+            return null;
>>>>+        }
>>>>+    }
>>>>+
>>>>+    private static class HandlerChainAnnotation {
>>>>+        private final Class<?> declaringClass;
>>>>+        private final HandlerChain ann;
>>>>+
>>>>+        HandlerChainAnnotation(HandlerChain hc, Class<?> clz) {
>>>>+            ann = hc;
>>>>+            declaringClass = clz;
>>>>+        }
>>>>+
>>>>+        public Class<?> getDeclaringClass() {
>>>>+            return declaringClass;
>>>>+        }
>>>>+
>>>>+        public String getFileName() {
>>>>+            return ann.file();
>>>>+        }
>>>>+
>>>>+        public String getChainName() {
>>>>+            return ann.name();
>>>>+        }
>>>>+
>>>>+        public void validate() {
>>>>+            if (null == ann.file() || "".equals(ann.file())) {
>>>>+                throw new 
>>>>     
>>>>
>>>>        
>>>>
>>>WebServiceException(BUNDLE.getString("ANNOTATION_WITHOUT_URL_EXC"));
>>>   
>>>
>>>      
>>>
>>>>+            }
>>>>+            if (null == ann.name() || "".equals(ann.name())) {
>>>>+                LOG.fine("no handler name specified, 
>>>>     
>>>>
>>>>        
>>>>
>>>defaulting to first declared");
>>>   
>>>
>>>      
>>>
>>>>+            }
>>>>+        }
>>>>+
>>>>+        public String toString() {
>>>>+            return "[" + declaringClass + "," + ann + "]";
>>>>+        }
>>>>+    }
>>>>+}
>>>>
>>>>Propchange: 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache
>>>/cxf/jaxws/handler/AnnotationHandlerChainBuilder.java
>>>   
>>>
>>>      
>>>
>>>>-------------------------------------------------------------
>>>>     
>>>>
>>>>        
>>>>
>>>-----------------
>>>   
>>>
>>>      
>>>
>>>>  svn:eol-style = native
>>>>
>>>>Propchange: 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache
>>>/cxf/jaxws/handler/AnnotationHandlerChainBuilder.java
>>>   
>>>
>>>      
>>>
>>>>-------------------------------------------------------------
>>>>     
>>>>
>>>>        
>>>>
>>>-----------------
>>>   
>>>
>>>      
>>>
>>>>  svn:keywords = Rev Date
>>>>
>>>>Added: 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache
>>>/cxf/jaxws/handler/HandlerChainBuilder.java
>>>   
>>>
>>>      
>>>
>>>>URL: 
>>>>     
>>>>
>>>>        
>>>>
>>>http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/j
>>>axws/src/main/java/org/apache/cxf/jaxws/handler/HandlerChainBu
>>>ilder.java?view=auto&rev=450934
>>>   
>>>
>>>      
>>>
>>>>=============================================================
>>>>     
>>>>
>>>>        
>>>>
>>>=================
>>>   
>>>
>>>      
>>>
>>>>--- 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache
>>>/cxf/jaxws/handler/HandlerChainBuilder.java (added)
>>>   
>>>
>>>      
>>>
>>>>+++ 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache
>>>/cxf/jaxws/handler/HandlerChainBuilder.java Thu Sep 28 10:33:57 2006
>>>   
>>>
>>>      
>>>
>>>>@@ -0,0 +1,184 @@
>>>>+/**
>>>>+ * 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.handler;
>>>>+
>>>>+import java.lang.reflect.InvocationTargetException;
>>>>+import java.lang.reflect.Method;
>>>>+import java.util.ArrayList;
>>>>+import java.util.HashMap;
>>>>+import java.util.List;
>>>>+import java.util.Map;
>>>>+import java.util.ResourceBundle;
>>>>+import java.util.logging.Level;
>>>>+import java.util.logging.Logger;
>>>>+
>>>>+import javax.xml.ws.WebServiceException;
>>>>+import javax.xml.ws.handler.Handler;
>>>>+import javax.xml.ws.handler.LogicalHandler;
>>>>+
>>>>+import org.apache.cxf.Bus;
>>>>+import org.apache.cxf.common.injection.ResourceInjector;
>>>>+import org.apache.cxf.common.logging.LogUtils;
>>>>+import org.apache.cxf.jaxws.javaee.HandlerChainType;
>>>>+import org.apache.cxf.jaxws.javaee.ParamValueType;
>>>>+import org.apache.cxf.jaxws.javaee.PortComponentHandlerType;
>>>>+import org.apache.cxf.resource.ResourceManager;
>>>>+import org.apache.cxf.resource.ResourceResolver;
>>>>+
>>>>+public class HandlerChainBuilder {
>>>>+    static final Logger LOG = 
>>>>     
>>>>
>>>>        
>>>>
>>>LogUtils.getL7dLogger(HandlerChainBuilder.class);
>>>   
>>>
>>>      
>>>
>>>>+    private static final ResourceBundle BUNDLE = 
>>>>     
>>>>
>>>>        
>>>>
>>>LOG.getResourceBundle();
>>>   
>>>
>>>      
>>>
>>>>+
>>>>+    private Bus bus;
>>>>+
>>>>+    private boolean handlerInitEnabled;
>>>>+
>>>>+    public HandlerChainBuilder(Bus aBus) {
>>>>+        bus = aBus;
>>>>+    }
>>>>+
>>>>+    public HandlerChainBuilder() {
>>>>+        this(null);
>>>>+    }
>>>>+
>>>>+    public List<Handler> 
>>>>     
>>>>
>>>>        
>>>>
>>>buildHandlerChainFromConfiguration(HandlerChainType hc) {
>>>   
>>>
>>>      
>>>
>>>>+        if (null == hc) {
>>>>+            return null;
>>>>+        }
>>>>+        return sortHandlers(buildHandlerChain(hc, 
>>>>     
>>>>
>>>>        
>>>>
>>>getHandlerClassLoader()));
>>>   
>>>
>>>      
>>>
>>>>+    }
>>>>+
>>>>+    /**
>>>>+     * sorts the handlers into correct order. All of the 
>>>>     
>>>>
>>>>        
>>>>
>>>logical handlers first
>>>   
>>>
>>>      
>>>
>>>>+     * followed by the protocol handlers
>>>>+     * 
>>>>+     * @param handlers
>>>>+     * @return sorted list of handlers
>>>>+     */
>>>>+    public List<Handler> sortHandlers(List<Handler> handlers) {
>>>>+
>>>>+        List<LogicalHandler> logicalHandlers = new 
>>>>     
>>>>
>>>>        
>>>>
>>>ArrayList<LogicalHandler>();
>>>   
>>>
>>>      
>>>
>>>>+        List<Handler> protocolHandlers = new ArrayList<Handler>();
>>>>+
>>>>+        for (Handler handler : handlers) {
>>>>+            if (handler instanceof LogicalHandler) {
>>>>+                logicalHandlers.add((LogicalHandler)handler);
>>>>+            } else {
>>>>+                protocolHandlers.add(handler);
>>>>+            }
>>>>+        }
>>>>+
>>>>+        List<Handler> sortedHandlers = new ArrayList<Handler>();
>>>>+        sortedHandlers.addAll(logicalHandlers);
>>>>+        sortedHandlers.addAll(protocolHandlers);
>>>>+        return sortedHandlers;
>>>>+    }
>>>>+
>>>>+    public void setHandlerInitEnabled(boolean b) {
>>>>+        handlerInitEnabled = b;
>>>>+    }
>>>>+
>>>>+    public boolean isHandlerInitEnabled() {
>>>>+        return handlerInitEnabled;
>>>>+    }
>>>>+
>>>>+    protected ClassLoader getHandlerClassLoader() {
>>>>+        return getClass().getClassLoader();
>>>>+    }
>>>>+
>>>>+    protected List<Handler> 
>>>>     
>>>>
>>>>        
>>>>
>>>buildHandlerChain(HandlerChainType hc, ClassLoader classLoader) {
>>>   
>>>
>>>      
>>>
>>>>+        List<Handler> handlerChain = new ArrayList<Handler>();
>>>>+        for (PortComponentHandlerType ht : hc.getHandler()) {
>>>>+            try {
>>>>+                LOG.log(Level.FINE, "loading handler", 
>>>>     
>>>>
>>>>        
>>>>
>>>trimString(ht.getHandlerName().getValue()));
>>>   
>>>
>>>      
>>>
>>>>+
>>>>+                Class<? extends Handler> handlerClass = 
>>>>     
>>>>
>>>>        
>>>>
>>>Class.forName(
>>>   
>>>
>>>      
>>>
>>>>+                                                            
>>>>     
>>>>
>>>>        
>>>>
>>>         trimString(ht.getHandlerClass()
>>>   
>>>
>>>      
>>>
>>>>+                                                            
>>>>     
>>>>
>>>>        
>>>>
>>>             .getValue()), true, classLoader)
>>>   
>>>
>>>      
>>>
>>>>+                    .asSubclass(Handler.class);
>>>>+
>>>>+                Handler handler = handlerClass.newInstance();
>>>>+                LOG.fine("adding handler to chain: " + handler);
>>>>+                configureHandler(handler, ht);
>>>>+                handlerChain.add(handler);
>>>>+            } catch (Exception e) {
>>>>+                throw new 
>>>>     
>>>>
>>>>        
>>>>
>>>WebServiceException(BUNDLE.getString("HANDLER_INSTANTIATION_EXC"), e);
>>>   
>>>
>>>      
>>>
>>>>+            }
>>>>+        }
>>>>+        return handlerChain;
>>>>+    }
>>>>+
>>>>+    private void configureHandler(Handler handler, 
>>>>     
>>>>
>>>>        
>>>>
>>>PortComponentHandlerType h) {
>>>   
>>>
>>>      
>>>
>>>>+        if (!handlerInitEnabled) {
>>>>+            return;
>>>>+        }
>>>>+
>>>>+        if (h.getInitParam().size() == 0) {
>>>>+            return;
>>>>+        }
>>>>+
>>>>+        Map<String, String> params = new HashMap<String, String>();
>>>>+
>>>>+        for (ParamValueType param : h.getInitParam()) {
>>>>+            params.put(trimString(param.getParamName() == 
>>>>     
>>>>
>>>>        
>>>>
>>>null ? null : param.getParamName().getValue()),
>>>   
>>>
>>>      
>>>
>>>>+                       trimString(param.getParamValue() == 
>>>>     
>>>>
>>>>        
>>>>
>>>null ? null : param.getParamValue().getValue()));
>>>   
>>>
>>>      
>>>
>>>>+        }
>>>>+
>>>>+        Method initMethod = getInitMethod(handler);
>>>>+        if (initMethod != null) {
>>>>+            initializeViaInitMethod(handler, params, initMethod);
>>>>+        } else {
>>>>+            initializeViaInjection(handler, params);
>>>>+        }
>>>>+    }
>>>>+
>>>>+    private void initializeViaInjection(Handler handler, 
>>>>     
>>>>
>>>>        
>>>>
>>>final Map<String, String> params) {
>>>   
>>>
>>>      
>>>
>>>>+        ResourceManager resMgr = 
>>>>     
>>>>
>>>>        
>>>>
>>>bus.getExtension(ResourceManager.class);
>>>   
>>>
>>>      
>>>
>>>>+        List<ResourceResolver> resolvers = 
>>>>     
>>>>
>>>>        
>>>>
>>>resMgr.getResourceResolvers();
>>>   
>>>
>>>      
>>>
>>>>+        resolvers.add(new InitParamResourceResolver(params));
>>>>+        ResourceInjector resInj = new 
>>>>     
>>>>
>>>>        
>>>>
>>>ResourceInjector(resMgr, resolvers);
>>>   
>>>
>>>      
>>>
>>>>+        resInj.inject(handler);
>>>>+    }
>>>>+
>>>>+    private void initializeViaInitMethod(Handler handler, 
>>>>     
>>>>
>>>>        
>>>>
>>>Map<String, String> params, Method init) {
>>>   
>>>
>>>      
>>>
>>>>+        try {
>>>>+            init.invoke(handler, params);
>>>>+        } catch (InvocationTargetException ex) {
>>>>+            Throwable t = ex.getCause() != null ? 
>>>>     
>>>>
>>>>        
>>>>
>>>ex.getCause() : ex;
>>>   
>>>
>>>      
>>>
>>>>+            LogUtils.log(LOG, Level.WARNING, 
>>>>     
>>>>
>>>>        
>>>>
>>>"INIT_METHOD_THREW_EXCEPTION", t, handler.getClass());
>>>   
>>>
>>>      
>>>
>>>>+        } catch (IllegalAccessException ex) {
>>>>+            LOG.log(Level.SEVERE, "CANNOT_ACCESS_INIT", 
>>>>     
>>>>
>>>>        
>>>>
>>>handler.getClass());
>>>   
>>>
>>>      
>>>
>>>>+        }
>>>>+    }
>>>>+
>>>>+    private Method getInitMethod(Handler handler) {
>>>>+        Method m = null;
>>>>+        try {
>>>>+            m = handler.getClass().getMethod("init", Map.class);
>>>>+        } catch (NoSuchMethodException ex) {
>>>>+            // emtpy
>>>>+        }
>>>>+        return m;
>>>>+    }
>>>>+
>>>>+    private String trimString(String str) {
>>>>+        return str != null ? str.trim() : null;
>>>>+    }
>>>>+}
>>>>
>>>>Propchange: 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache
>>>/cxf/jaxws/handler/HandlerChainBuilder.java
>>>   
>>>
>>>      
>>>
>>>>-------------------------------------------------------------
>>>>     
>>>>
>>>>        
>>>>
>>>-----------------
>>>   
>>>
>>>      
>>>
>>>>  svn:eol-style = native
>>>>
>>>>Propchange: 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache
>>>/cxf/jaxws/handler/HandlerChainBuilder.java
>>>   
>>>
>>>      
>>>
>>>>-------------------------------------------------------------
>>>>     
>>>>
>>>>        
>>>>
>>>-----------------
>>>   
>>>
>>>      
>>>
>>>>  svn:keywords = Rev Date
>>>>
>>>>Modified: 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache
>>>/cxf/jaxws/handler/Messages.properties
>>>   
>>>
>>>      
>>>
>>>>URL: 
>>>>     
>>>>
>>>>        
>>>>
>>>http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/j
>>>axws/src/main/java/org/apache/cxf/jaxws/handler/Messages.prope
>>>rties?view=diff&rev=450934&r1=450933&r2=450934
>>>   
>>>
>>>      
>>>
>>>>=============================================================
>>>>     
>>>>
>>>>        
>>>>
>>>=================
>>>   
>>>
>>>      
>>>
>>>>--- 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache
>>>/cxf/jaxws/handler/Messages.properties (original)
>>>   
>>>
>>>      
>>>
>>>>+++ 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache
>>>/cxf/jaxws/handler/Messages.properties Thu Sep 28 10:33:57 2006
>>>   
>>>
>>>      
>>>
>>>>@@ -1,4 +1,7 @@
>>>>NO_INPUT_STREAM_EXC = No input stream available.
>>>>NO_OUTPUT_STREAM_EXC = No output stream available.
>>>>ANNOTATION_WITHOUT_URL_EXC = @HandlerChain annotation does 
>>>>     
>>>>
>>>>        
>>>>
>>>not contain a file name or url.
>>>   
>>>
>>>      
>>>
>>>>-HANDLER_CFG_FILE_NOT_FOUND_EXC = Unable to load handler 
>>>>     
>>>>
>>>>        
>>>>
>>>configuration {0} specified by annotation, file not found."
>>>   
>>>
>>>      
>>>
>>>>\ No newline at end of file
>>>>+HANDLER_CFG_FILE_NOT_FOUND_EXC = Unable to load handler 
>>>>     
>>>>
>>>>        
>>>>
>>>configuration {0} specified by annotation, file not found."
>>>   
>>>
>>>      
>>>
>>>>+HANDLER_INSTANTIATION_EXC = Failed to instantiate handler
>>>>+CHAIN_NOT_SPECIFIED_EXC = Chain not specified
>>>>+
>>>>
>>>>Added: 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/main/resources/META-
>>>INF/cxf/cxf-property-editors.xml
>>>   
>>>
>>>      
>>>
>>>>URL: 
>>>>     
>>>>
>>>>        
>>>>
>>>http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/j
>>>axws/src/main/resources/META-INF/cxf/cxf-property-editors.xml?
>>>view=auto&rev=450934
>>>   
>>>
>>>      
>>>
>>>>=============================================================
>>>>     
>>>>
>>>>        
>>>>
>>>=================
>>>   
>>>
>>>      
>>>
>>>>--- 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/main/resources/META-
>>>INF/cxf/cxf-property-editors.xml (added)
>>>   
>>>
>>>      
>>>
>>>>+++ 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/main/resources/META-
>>>INF/cxf/cxf-property-editors.xml Thu Sep 28 10:33:57 2006
>>>   
>>>
>>>      
>>>
>>>>@@ -0,0 +1,49 @@
>>>>+<?xml version="1.0" encoding="UTF-8"?>
>>>>+<!--
>>>>+  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.
>>>>+-->
>>>>+<beans xmlns="http://www.springframework.org/schema/beans"
>>>>+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>>+       xsi:schemaLocation="
>>>>+http://www.springframework.org/schema/beans 
>>>>     
>>>>
>>>>        
>>>>
>>>http://www.springframework.org/schema/beans/spring-beans.xsd">
>>>   
>>>
>>>      
>>>
>>>>+   
>>>>+    <bean 
>>>>     
>>>>
>>>>        
>>>>
>>>id="org.apache.cxf.jaxws.javaee.customEditorConfigurer" 
>>>class="org.springframework.beans.factory.config.CustomEditorCo
>>>nfigurer">
>>>   
>>>
>>>      
>>>
>>>>+        <property name="propertyEditorRegistrars">
>>>>+            <list>
>>>>+                <!--
>>>>+                <ref 
>>>>     
>>>>
>>>>        
>>>>
>>>bean="org.apache.cxf.management.JaxbPropertyEditorRegistrar"/>
>>>   
>>>
>>>      
>>>
>>>>+                -->
>>>>+                <bean 
>>>>     
>>>>
>>>>        
>>>>
>>>class="org.apache.cxf.configuration.spring.JaxbPropertyEditorR
>>>egistrar">
>>>   
>>>
>>>      
>>>
>>>>+                    <property name="packageName" 
>>>>     
>>>>
>>>>        
>>>>
>>>value="org.apache.cxf.jaxws.javaee"/>
>>>   
>>>
>>>      
>>>
>>>>+                    <property name="propertyClassNames">
>>>>+                        <list>
>>>>+                            <value>HandlerChainType</value>
>>>>+                            <value>PortComponentHandlerType</value>
>>>>+                            <value>DisplayNameType</value>
>>>>+                            <value>IconType</value>
>>>>+                            <value>FullyQualifiedClassType</value>
>>>>+                            <value>ParamValueType</value>
>>>>+                            <value>XsdQNameType</value>
>>>>+                            <value>String</value>
>>>>+                        </list>
>>>>+                    </property>
>>>>+                </bean>
>>>>+           </list>
>>>>+        </property>
>>>>+    </bean>
>>>>+</beans>
>>>>\ No newline at end of file
>>>>
>>>>Propchange: 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/main/resources/META-
>>>INF/cxf/cxf-property-editors.xml
>>>   
>>>
>>>      
>>>
>>>>-------------------------------------------------------------
>>>>     
>>>>
>>>>        
>>>>
>>>-----------------
>>>   
>>>
>>>      
>>>
>>>>  svn:eol-style = native
>>>>
>>>>Propchange: 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/main/resources/META-
>>>INF/cxf/cxf-property-editors.xml
>>>   
>>>
>>>      
>>>
>>>>-------------------------------------------------------------
>>>>     
>>>>
>>>>        
>>>>
>>>-----------------
>>>   
>>>
>>>      
>>>
>>>>  svn:keywords = Rev Date
>>>>
>>>>Propchange: 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/main/resources/META-
>>>INF/cxf/cxf-property-editors.xml
>>>   
>>>
>>>      
>>>
>>>>-------------------------------------------------------------
>>>>     
>>>>
>>>>        
>>>>
>>>-----------------
>>>   
>>>
>>>      
>>>
>>>>  svn:mime-type = text/xml
>>>>
>>>>Modified: 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/main/resources/schem
>>>as/configuration/javaee_web_services_1_2.xsd
>>>   
>>>
>>>      
>>>
>>>>URL: 
>>>>     
>>>>
>>>>        
>>>>
>>>http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/j
>>>axws/src/main/resources/schemas/configuration/javaee_web_servi
>>>ces_1_2.xsd?view=diff&rev=450934&r1=450933&r2=450934
>>>   
>>>
>>>      
>>>
>>>>=============================================================
>>>>     
>>>>
>>>>        
>>>>
>>>=================
>>>   
>>>
>>>      
>>>
>>>>--- 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/main/resources/schem
>>>as/configuration/javaee_web_services_1_2.xsd (original)
>>>   
>>>
>>>      
>>>
>>>>+++ 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/main/resources/schem
>>>as/configuration/javaee_web_services_1_2.xsd Thu Sep 28 10:33:57 2006
>>>   
>>>
>>>      
>>>
>>>>@@ -3,8 +3,12 @@
>>>>	    targetNamespace="http://java.sun.com/xml/ns/javaee"
>>>>	    xmlns:javaee="http://java.sun.com/xml/ns/javaee"
>>>>	    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>>>>+            xmlns:cfg="http://cxf.apache.org/configuration/cfg"
>>>>+            xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
>>>>	    elementFormDefault="qualified"
>>>>	    attributeFormDefault="unqualified"
>>>>+            jaxb:extensionBindingPrefixes="cfg"
>>>>+            jaxb:version="2.0"
>>>>	    version="1.2">
>>>> <xsd:annotation>
>>>>   <xsd:documentation>
>>>>@@ -743,5 +747,16 @@
>>>>   <xsd:attribute name="id" type="xsd:ID"/>
>>>> </xsd:complexType>
>>>>
>>>>+  <xsd:element name="jaxwshandler" type="javaee:handler-chainType"/>
>>>>+  <xsd:complexType name="HandlerConfigBean">        
>>>>+    <xsd:annotation>
>>>>+      <xsd:appinfo>                
>>>>+        <cfg:configurable/>
>>>>+      </xsd:appinfo>
>>>>+    </xsd:annotation>
>>>>+    <xsd:sequence>
>>>>+      <xsd:element ref="javaee:jaxwshandler"/>
>>>>+    </xsd:sequence>
>>>>+  </xsd:complexType>
>>>></xsd:schema>
>>>>
>>>>
>>>>Added: 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache
>>>/cxf/jaxws/handler/AnnotationHandlerChainBuilderTest.java
>>>   
>>>
>>>      
>>>
>>>>URL: 
>>>>     
>>>>
>>>>        
>>>>
>>>http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/j
>>>axws/src/test/java/org/apache/cxf/jaxws/handler/AnnotationHand
>>>lerChainBuilderTest.java?view=auto&rev=450934
>>>   
>>>
>>>      
>>>
>>>>=============================================================
>>>>     
>>>>
>>>>        
>>>>
>>>=================
>>>   
>>>
>>>      
>>>
>>>>--- 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache
>>>/cxf/jaxws/handler/AnnotationHandlerChainBuilderTest.java (added)
>>>   
>>>
>>>      
>>>
>>>>+++ 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache
>>>/cxf/jaxws/handler/AnnotationHandlerChainBuilderTest.java Thu 
>>>Sep 28 10:33:57 2006
>>>   
>>>
>>>      
>>>
>>>>@@ -0,0 +1,76 @@
>>>>+/**
>>>>+ * 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.handler;
>>>>+
>>>>+import java.util.List;
>>>>+import java.util.Map;
>>>>+
>>>>+import javax.jws.HandlerChain;
>>>>+import javax.jws.WebService;
>>>>+import javax.xml.ws.handler.Handler;
>>>>+import javax.xml.ws.handler.LogicalHandler;
>>>>+import javax.xml.ws.handler.MessageContext;
>>>>+
>>>>+import junit.framework.TestCase;
>>>>+
>>>>+public class AnnotationHandlerChainBuilderTest extends TestCase {
>>>>+
>>>>+    public void setUp() {
>>>>+    }
>>>>+
>>>>+    public void testFindHandlerChainAnnotation() {
>>>>+        HandlerTestImpl handlerTestImpl = new HandlerTestImpl();
>>>>+        System.out.println(TestLogicalHandler.class.getName());
>>>>+        AnnotationHandlerChainBuilder chainBuilder = new 
>>>>     
>>>>
>>>>        
>>>>
>>>AnnotationHandlerChainBuilder();
>>>   
>>>
>>>      
>>>
>>>>+        List<Handler> handlers = 
>>>>     
>>>>
>>>>        
>>>>
>>>chainBuilder.buildHandlerChainFromClass(handlerTestImpl.getClass());
>>>   
>>>
>>>      
>>>
>>>>+        assertNotNull(handlers);
>>>>+        assertEquals(2, handlers.size());
>>>>+        assertEquals(TestLogicalHandler.class, 
>>>>     
>>>>
>>>>        
>>>>
>>>handlers.get(0).getClass());
>>>   
>>>
>>>      
>>>
>>>>+        assertEquals(TestLogicalHandler.class, 
>>>>     
>>>>
>>>>        
>>>>
>>>handlers.get(1).getClass());
>>>   
>>>
>>>      
>>>
>>>>+    }
>>>>+
>>>>+    public static class TestLogicalHandler implements 
>>>>     
>>>>
>>>>        
>>>>
>>>LogicalHandler {
>>>   
>>>
>>>      
>>>
>>>>+        Map config;
>>>>+        boolean initCalled;
>>>>+
>>>>+        public void close(MessageContext arg0) {
>>>>+        }
>>>>+
>>>>+        public boolean handleFault(MessageContext arg0) {
>>>>+            return false;
>>>>+        }
>>>>+
>>>>+        public boolean handleMessage(MessageContext arg0) {
>>>>+            return false;
>>>>+        }
>>>>+
>>>>+        public final void init(final Map map) {
>>>>+            config = map;
>>>>+            initCalled = true;
>>>>+        }
>>>>+    }
>>>>+
>>>>+    @WebService()
>>>>+    @HandlerChain(file = "./handlers.xml", name = 
>>>>     
>>>>
>>>>        
>>>>
>>>"TestHandlerChain")
>>>   
>>>
>>>      
>>>
>>>>+    public class HandlerTestImpl {
>>>>+
>>>>+    }
>>>>+
>>>>+}
>>>>
>>>>Propchange: 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache
>>>/cxf/jaxws/handler/AnnotationHandlerChainBuilderTest.java
>>>   
>>>
>>>      
>>>
>>>>-------------------------------------------------------------
>>>>     
>>>>
>>>>        
>>>>
>>>-----------------
>>>   
>>>
>>>      
>>>
>>>>  svn:eol-style = native
>>>>
>>>>Propchange: 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache
>>>/cxf/jaxws/handler/AnnotationHandlerChainBuilderTest.java
>>>   
>>>
>>>      
>>>
>>>>-------------------------------------------------------------
>>>>     
>>>>
>>>>        
>>>>
>>>-----------------
>>>   
>>>
>>>      
>>>
>>>>  svn:keywords = Rev Date
>>>>
>>>>Added: 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache
>>>/cxf/jaxws/handler/HandlerChainBuilderTest.java
>>>   
>>>
>>>      
>>>
>>>>URL: 
>>>>     
>>>>
>>>>        
>>>>
>>>http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/j
>>>axws/src/test/java/org/apache/cxf/jaxws/handler/HandlerChainBu
>>>ilderTest.java?view=auto&rev=450934
>>>   
>>>
>>>      
>>>
>>>>=============================================================
>>>>     
>>>>
>>>>        
>>>>
>>>=================
>>>   
>>>
>>>      
>>>
>>>>--- 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache
>>>/cxf/jaxws/handler/HandlerChainBuilderTest.java (added)
>>>   
>>>
>>>      
>>>
>>>>+++ 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache
>>>/cxf/jaxws/handler/HandlerChainBuilderTest.java Thu Sep 28 
>>>10:33:57 2006
>>>   
>>>
>>>      
>>>
>>>>@@ -0,0 +1,240 @@
>>>>+/**
>>>>+ * 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.handler;
>>>>+
>>>>+import java.util.Arrays;
>>>>+import java.util.List;
>>>>+import java.util.Map;
>>>>+
>>>>+import javax.xml.ws.WebServiceException;
>>>>+import javax.xml.ws.handler.Handler;
>>>>+import javax.xml.ws.handler.LogicalHandler;
>>>>+import javax.xml.ws.handler.MessageContext;
>>>>+
>>>>+import junit.framework.TestCase;
>>>>+
>>>>+import org.apache.cxf.Bus;
>>>>+import org.apache.cxf.jaxws.javaee.FullyQualifiedClassType;
>>>>+import org.apache.cxf.jaxws.javaee.HandlerChainType;
>>>>+import org.apache.cxf.jaxws.javaee.ParamValueType;
>>>>+import org.apache.cxf.jaxws.javaee.PortComponentHandlerType;
>>>>+import org.easymock.classextension.EasyMock;
>>>>+
>>>>+public class HandlerChainBuilderTest extends TestCase {
>>>>+
>>>>+    Handler[] allHandlers = 
>>>>     
>>>>
>>>>        
>>>>
>>>{EasyMock.createMock(LogicalHandler.class), 
>>>EasyMock.createMock(Handler.class),
>>>   
>>>
>>>      
>>>
>>>>+                             
>>>>     
>>>>
>>>>        
>>>>
>>>EasyMock.createMock(Handler.class), 
>>>EasyMock.createMock(LogicalHandler.class)};
>>>   
>>>
>>>      
>>>
>>>>+    Handler[] logicalHandlers = {allHandlers[0], allHandlers[3]};
>>>>+    Handler[] protocolHandlers = {allHandlers[1], allHandlers[2]};
>>>>+
>>>>+    HandlerChainBuilder builder = new 
>>>>     
>>>>
>>>>        
>>>>
>>>HandlerChainBuilder(EasyMock.createNiceMock(Bus.class));
>>>   
>>>
>>>      
>>>
>>>>+
>>>>+    public void setUp() {
>>>>+        builder.setHandlerInitEnabled(true);
>>>>+    }
>>>>+
>>>>+    public void testChainSorting() {
>>>>+        List<Handler> sortedHandlerChain = 
>>>>     
>>>>
>>>>        
>>>>
>>>builder.sortHandlers(Arrays.asList(allHandlers));
>>>   
>>>
>>>      
>>>
>>>>+        assertSame(logicalHandlers[0], sortedHandlerChain.get(0));
>>>>+        assertSame(logicalHandlers[1], sortedHandlerChain.get(1));
>>>>+        assertSame(protocolHandlers[0], sortedHandlerChain.get(2));
>>>>+        assertSame(protocolHandlers[1], sortedHandlerChain.get(3));
>>>>+    }
>>>>+
>>>>+    public void testBuildHandlerChainFromConfiguration() {
>>>>+
>>>>+        HandlerChainType hc = createHandlerChainType();
>>>>+        List<Handler> chain = 
>>>>     
>>>>
>>>>        
>>>>
>>>builder.buildHandlerChainFromConfiguration(hc);
>>>   
>>>
>>>      
>>>
>>>>+
>>>>+        assertNotNull(chain);
>>>>+        assertEquals(4, chain.size());
>>>>+        assertEquals(TestLogicalHandler.class, 
>>>>     
>>>>
>>>>        
>>>>
>>>chain.get(0).getClass());
>>>   
>>>
>>>      
>>>
>>>>+        assertEquals(TestLogicalHandler.class, 
>>>>     
>>>>
>>>>        
>>>>
>>>chain.get(1).getClass());
>>>   
>>>
>>>      
>>>
>>>>+        assertEquals(TestProtocolHandler.class, 
>>>>     
>>>>
>>>>        
>>>>
>>>chain.get(2).getClass());
>>>   
>>>
>>>      
>>>
>>>>+        assertEquals(TestProtocolHandler.class, 
>>>>     
>>>>
>>>>        
>>>>
>>>chain.get(3).getClass());
>>>   
>>>
>>>      
>>>
>>>>+
>>>>+        TestLogicalHandler tlh = (TestLogicalHandler)chain.get(0);
>>>>+        assertTrue(!tlh.initCalled);
>>>>+        assertNull(tlh.config);
>>>>+    }
>>>>+
>>>>+    public void testBuilderCallsInit() {
>>>>+        HandlerChainType hc = createHandlerChainType();
>>>>+        hc.getHandler().remove(3);
>>>>+        hc.getHandler().remove(2);
>>>>+        hc.getHandler().remove(1);
>>>>+
>>>>+        PortComponentHandlerType h = hc.getHandler().get(0);
>>>>+        List<ParamValueType> params = h.getInitParam();
>>>>+
>>>>+        ParamValueType p = new ParamValueType();
>>>>+        org.apache.cxf.jaxws.javaee.String pName = new 
>>>>     
>>>>
>>>>        
>>>>
>>>org.apache.cxf.jaxws.javaee.String();
>>>   
>>>
>>>      
>>>
>>>>+        pName.setValue("foo");
>>>>+        p.setParamName(pName);
>>>>+        org.apache.cxf.jaxws.javaee.XsdStringType pValue = 
>>>>     
>>>>
>>>>        
>>>>
>>>new org.apache.cxf.jaxws.javaee.XsdStringType();
>>>   
>>>
>>>      
>>>
>>>>+        pValue.setValue("1");
>>>>+        p.setParamValue(pValue);
>>>>+        params.add(p);
>>>>+
>>>>+        p = new ParamValueType();
>>>>+        pName = new org.apache.cxf.jaxws.javaee.String();
>>>>+        pName.setValue("bar");
>>>>+        p.setParamName(pName);
>>>>+        pValue = new org.apache.cxf.jaxws.javaee.XsdStringType();
>>>>+        pValue.setValue("2");
>>>>+        p.setParamValue(pValue);
>>>>+        params.add(p);
>>>>+
>>>>+        List<Handler> chain = 
>>>>     
>>>>
>>>>        
>>>>
>>>builder.buildHandlerChainFromConfiguration(hc);
>>>   
>>>
>>>      
>>>
>>>>+        assertEquals(1, chain.size());
>>>>+        TestLogicalHandler tlh = (TestLogicalHandler)chain.get(0);
>>>>+
>>>>+        assertTrue(tlh.initCalled);
>>>>+        Map cfg = tlh.config;
>>>>+        assertNotNull(tlh.config);
>>>>+
>>>>+        assertEquals(2, cfg.keySet().size());
>>>>+        assertEquals("1", cfg.get("foo"));
>>>>+        assertEquals("2", cfg.get("bar"));
>>>>+    }
>>>>+
>>>>+    public void testBuilderCallsInitWithNoInitParamValues() {
>>>>+        HandlerChainType hc = createHandlerChainType();
>>>>+        hc.getHandler().remove(3);
>>>>+        hc.getHandler().remove(2);
>>>>+        hc.getHandler().remove(1);
>>>>+
>>>>+        PortComponentHandlerType h = hc.getHandler().get(0);
>>>>+        List<ParamValueType> params = h.getInitParam();
>>>>+
>>>>+        ParamValueType p = new ParamValueType();
>>>>+        org.apache.cxf.jaxws.javaee.String pName = new 
>>>>     
>>>>
>>>>        
>>>>
>>>org.apache.cxf.jaxws.javaee.String();
>>>   
>>>
>>>      
>>>
>>>>+        pName.setValue("foo");
>>>>+        p.setParamName(pName);
>>>>+        params.add(p);
>>>>+
>>>>+        List<Handler> chain = 
>>>>     
>>>>
>>>>        
>>>>
>>>builder.buildHandlerChainFromConfiguration(hc);
>>>   
>>>
>>>      
>>>
>>>>+        assertEquals(1, chain.size());
>>>>+        TestLogicalHandler tlh = (TestLogicalHandler)chain.get(0);
>>>>+
>>>>+        assertTrue(tlh.initCalled);
>>>>+        Map cfg = tlh.config;
>>>>+        assertNotNull(tlh.config);
>>>>+        assertEquals(1, cfg.keySet().size());
>>>>+    }
>>>>+
>>>>+    public void testBuilderCannotLoadHandlerClass() {
>>>>+        HandlerChainType hc = createHandlerChainType();
>>>>+        hc.getHandler().remove(3);
>>>>+        hc.getHandler().remove(2);
>>>>+        hc.getHandler().remove(1);
>>>>+        FullyQualifiedClassType type = new 
>>>>     
>>>>
>>>>        
>>>>
>>>FullyQualifiedClassType();
>>>   
>>>
>>>      
>>>
>>>>+        type.setValue("no.such.class");
>>>>+        hc.getHandler().get(0).setHandlerClass(type);
>>>>+
>>>>+        try {
>>>>+            builder.buildHandlerChainFromConfiguration(hc);
>>>>+            fail("did not get expected exception");
>>>>+        } catch (WebServiceException ex) {
>>>>+            // ex.printStackTrace();
>>>>+            assertNotNull(ex.getCause());
>>>>+            assertEquals(ClassNotFoundException.class, 
>>>>     
>>>>
>>>>        
>>>>
>>>ex.getCause().getClass());
>>>   
>>>
>>>      
>>>
>>>>+        }
>>>>+    }
>>>>+
>>>>+    private HandlerChainType createHandlerChainType() {
>>>>+        HandlerChainType hc = new HandlerChainType();
>>>>+        List<PortComponentHandlerType> handlers = hc.getHandler();
>>>>+
>>>>+        PortComponentHandlerType h = new PortComponentHandlerType();
>>>>+        org.apache.cxf.jaxws.javaee.String name = new 
>>>>     
>>>>
>>>>        
>>>>
>>>org.apache.cxf.jaxws.javaee.String();
>>>   
>>>
>>>      
>>>
>>>>+        name.setValue("lh1");
>>>>+        h.setHandlerName(name);
>>>>+        FullyQualifiedClassType type = new 
>>>>     
>>>>
>>>>        
>>>>
>>>FullyQualifiedClassType();
>>>   
>>>
>>>      
>>>
>>>>+        type.setValue(TestLogicalHandler.class.getName());
>>>>+        h.setHandlerClass(type);
>>>>+        handlers.add(h);
>>>>+
>>>>+        h = new PortComponentHandlerType();
>>>>+        name = new org.apache.cxf.jaxws.javaee.String();
>>>>+        name.setValue("ph1");
>>>>+        h.setHandlerName(name);
>>>>+        type = new FullyQualifiedClassType();
>>>>+        type.setValue(TestProtocolHandler.class.getName());
>>>>+        h.setHandlerClass(type);
>>>>+        handlers.add(h);
>>>>+
>>>>+        h = new PortComponentHandlerType();
>>>>+        name = new org.apache.cxf.jaxws.javaee.String();
>>>>+        name.setValue("ph2");
>>>>+        h.setHandlerName(name);
>>>>+        type = new FullyQualifiedClassType();
>>>>+        type.setValue(TestProtocolHandler.class.getName());
>>>>+        h.setHandlerClass(type);
>>>>+        handlers.add(h);
>>>>+
>>>>+        h = new PortComponentHandlerType();
>>>>+        name = new org.apache.cxf.jaxws.javaee.String();
>>>>+        name.setValue("lh2");
>>>>+        h.setHandlerName(name);
>>>>+        type = new FullyQualifiedClassType();
>>>>+        type.setValue(TestLogicalHandler.class.getName());
>>>>+        h.setHandlerClass(type);
>>>>+        handlers.add(h);
>>>>+
>>>>+        return hc;
>>>>+    }
>>>>+
>>>>+    public static class TestLogicalHandler implements 
>>>>     
>>>>
>>>>        
>>>>
>>>LogicalHandler {
>>>   
>>>
>>>      
>>>
>>>>+
>>>>+        Map config;
>>>>+        boolean initCalled;
>>>>+
>>>>+        public void close(MessageContext arg0) {
>>>>+        }
>>>>+
>>>>+        public boolean handleFault(MessageContext arg0) {
>>>>+            return false;
>>>>+        }
>>>>+
>>>>+        public boolean handleMessage(MessageContext arg0) {
>>>>+            return false;
>>>>+        }
>>>>+
>>>>+        public final void init(final Map map) {
>>>>+            config = map;
>>>>+            initCalled = true;
>>>>+        }
>>>>+    }
>>>>+
>>>>+    public static class TestProtocolHandler implements Handler {
>>>>+
>>>>+        public void close(MessageContext arg0) {
>>>>+        }
>>>>+
>>>>+        public boolean handleFault(MessageContext arg0) {
>>>>+            return false;
>>>>+        }
>>>>+
>>>>+        public boolean handleMessage(MessageContext arg0) {
>>>>+            return false;
>>>>+        }
>>>>+    }
>>>>+}
>>>>
>>>>Propchange: 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache
>>>/cxf/jaxws/handler/HandlerChainBuilderTest.java
>>>   
>>>
>>>      
>>>
>>>>-------------------------------------------------------------
>>>>     
>>>>
>>>>        
>>>>
>>>-----------------
>>>   
>>>
>>>      
>>>
>>>>  svn:eol-style = native
>>>>
>>>>Propchange: 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache
>>>/cxf/jaxws/handler/HandlerChainBuilderTest.java
>>>   
>>>
>>>      
>>>
>>>>-------------------------------------------------------------
>>>>     
>>>>
>>>>        
>>>>
>>>-----------------
>>>   
>>>
>>>      
>>>
>>>>  svn:keywords = Rev Date
>>>>
>>>>Added: 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/test/resources/handlers.xml
>>>   
>>>
>>>      
>>>
>>>>URL: 
>>>>     
>>>>
>>>>        
>>>>
>>>http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/j
>>>axws/src/test/resources/handlers.xml?view=auto&rev=450934
>>>   
>>>
>>>      
>>>
>>>>=============================================================
>>>>     
>>>>
>>>>        
>>>>
>>>=================
>>>   
>>>
>>>      
>>>
>>>>--- 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/test/resources/handl
>>>ers.xml (added)
>>>   
>>>
>>>      
>>>
>>>>+++ 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/test/resources/handl
>>>ers.xml Thu Sep 28 10:33:57 2006
>>>   
>>>
>>>      
>>>
>>>>@@ -0,0 +1,50 @@
>>>>+<?xml version="1.0" encoding="UTF-8"?>
>>>>+<!--
>>>>+  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.
>>>>+-->
>>>>+<beans xmlns="http://www.springframework.org/schema/beans"
>>>>+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>>+       xmlns:javaee="http://java.sun.com/xml/ns/javaee"
>>>>+       
>>>>     
>>>>
>>>>        
>>>>
>>>xsi:schemaLocation="http://www.springframework.org/schema/bean
>>>s http://www.springframework.org/schema/beans/spring-beans.xsd">
>>>   
>>>
>>>      
>>>
>>>>+
>>>>+    <bean 
>>>>     
>>>>
>>>>        
>>>>
>>>id="org.apache.cxf.jaxws.javaee.HandlerConfigBean" abstract="true">
>>>   
>>>
>>>      
>>>
>>>>+        <property name="jaxwshandler">
>>>>+            <value>
>>>>+                <javaee:jaxwshandler>
>>>>+                    <javaee:handler>
>>>>+				
>>>>     
>>>>
>>>>        
>>>>
>>><javaee:handler-name>lh1</javaee:handler-name>
>>>   
>>>
>>>      
>>>
>>>>+				
>>>>     
>>>>
>>>>        
>>>>
>>><javaee:handler-class>org.apache.cxf.jaxws.handler.AnnotationH
>>>andlerChainBuilderTest$TestLogicalHandler</javaee:handler-class>
>>>   
>>>
>>>      
>>>
>>>>+				<javaee:init-param>
>>>>+					
>>>>     
>>>>
>>>>        
>>>>
>>><javaee:param-name>token</javaee:param-name>
>>>   
>>>
>>>      
>>>
>>>>+					
>>>>     
>>>>
>>>>        
>>>>
>>><javaee:param-value>String</javaee:param-value>
>>>   
>>>
>>>      
>>>
>>>>+				</javaee:init-param>
>>>>+                    </javaee:handler>
>>>>+                    <javaee:handler>
>>>>+				
>>>>     
>>>>
>>>>        
>>>>
>>><javaee:handler-name>lh2</javaee:handler-name>
>>>   
>>>
>>>      
>>>
>>>>+				
>>>>     
>>>>
>>>>        
>>>>
>>><javaee:handler-class>org.apache.cxf.jaxws.handler.AnnotationH
>>>andlerChainBuilderTest$TestLogicalHandler</javaee:handler-class>
>>>   
>>>
>>>      
>>>
>>>>+				<javaee:init-param>
>>>>+					
>>>>     
>>>>
>>>>        
>>>>
>>><javaee:param-name>token</javaee:param-name>
>>>   
>>>
>>>      
>>>
>>>>+					
>>>>     
>>>>
>>>>        
>>>>
>>><javaee:param-value>String</javaee:param-value>
>>>   
>>>
>>>      
>>>
>>>>+				</javaee:init-param>
>>>>+                    </javaee:handler>
>>>>+                </javaee:jaxwshandler>
>>>>+            </value>
>>>>+        </property>
>>>>+    </bean>
>>>>+    
>>>>+</beans>
>>>>\ No newline at end of file
>>>>
>>>>Propchange: 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/test/resources/handlers.xml
>>>   
>>>
>>>      
>>>
>>>>-------------------------------------------------------------
>>>>     
>>>>
>>>>        
>>>>
>>>-----------------
>>>   
>>>
>>>      
>>>
>>>>  svn:eol-style = native
>>>>
>>>>Propchange: 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/test/resources/handlers.xml
>>>   
>>>
>>>      
>>>
>>>>-------------------------------------------------------------
>>>>     
>>>>
>>>>        
>>>>
>>>-----------------
>>>   
>>>
>>>      
>>>
>>>>  svn:keywords = Rev Date
>>>>
>>>>Propchange: 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/rt/frontend/jaxws/src/test/resources/handlers.xml
>>>   
>>>
>>>      
>>>
>>>>-------------------------------------------------------------
>>>>     
>>>>
>>>>        
>>>>
>>>-----------------
>>>   
>>>
>>>      
>>>
>>>>  svn:mime-type = text/xml
>>>>
>>>>Modified: 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/syst
>>>est/handlers/HandlerTestImpl.java
>>>   
>>>
>>>      
>>>
>>>>URL: 
>>>>     
>>>>
>>>>        
>>>>
>>>http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/
>>>test/java/org/apache/cxf/systest/handlers/HandlerTestImpl.java
>>>?view=diff&rev=450934&r1=450933&r2=450934
>>>   
>>>
>>>      
>>>
>>>>=============================================================
>>>>     
>>>>
>>>>        
>>>>
>>>=================
>>>   
>>>
>>>      
>>>
>>>>--- 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/syst
>>>est/handlers/HandlerTestImpl.java (original)
>>>   
>>>
>>>      
>>>
>>>>+++ 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/syst
>>>est/handlers/HandlerTestImpl.java Thu Sep 28 10:33:57 2006
>>>   
>>>
>>>      
>>>
>>>>@@ -22,7 +22,7 @@
>>>>import java.util.ArrayList;
>>>>import java.util.List;
>>>>import javax.annotation.Resource;
>>>>-import javax.jws.HandlerChain;
>>>>+//import javax.jws.HandlerChain;
>>>>import javax.jws.WebService;
>>>>import javax.xml.ws.WebServiceContext;
>>>>import javax.xml.ws.handler.MessageContext;
>>>>@@ -30,15 +30,14 @@
>>>>import org.apache.handler_test.PingException;
>>>>import org.apache.handler_test.types.PingFaultDetails;
>>>>
>>>>-@WebService(serviceName = "HandlerTestService", 
>>>>-            portName = "SoapPort", 
>>>>-            endpointInterface = 
>>>>     
>>>>
>>>>        
>>>>
>>>"org.apache.handler_test.HandlerTest", 
>>>   
>>>
>>>      
>>>
>>>>+@WebService(serviceName = "HandlerTestService",
>>>>+            portName = "SoapPort",
>>>>+            endpointInterface = 
>>>>     
>>>>
>>>>        
>>>>
>>>"org.apache.handler_test.HandlerTest",
>>>   
>>>
>>>      
>>>
>>>>           targetNamespace = "http://apache.org/handler_test")
>>>>-@HandlerChain(file = "./handlers.xml", name = "TestHandlerChain")
>>>>public class HandlerTestImpl implements HandlerTest {
>>>>
>>>>-    private WebServiceContext context; 
>>>>-        
>>>>+    private WebServiceContext context;
>>>>+
>>>>   public final List<String> ping() {
>>>>
>>>>       try {
>>>>@@ -51,40 +50,40 @@
>>>>       } catch (Exception e) {
>>>>           e.printStackTrace();
>>>>
>>>>-        } 
>>>>+        }
>>>>       return null;
>>>>   }
>>>>
>>>>   public final void pingOneWay() {
>>>>-    } 
>>>>+    }
>>>>
>>>>   public final List<String> pingWithArgs(String 
>>>>     
>>>>
>>>>        
>>>>
>>>handlerCommand) throws PingException {
>>>   
>>>
>>>      
>>>
>>>>-        List<String> ret = new ArrayList<String>(); 
>>>>-        ret.add(handlerCommand); 
>>>>+        List<String> ret = new ArrayList<String>();
>>>>+        ret.add(handlerCommand);
>>>>       //ret.addAll(getHandlersInfo(context.getMessageContext()));
>>>>
>>>>       if (handlerCommand.contains("throw exception")) {
>>>>-            PingFaultDetails details = new PingFaultDetails(); 
>>>>+            PingFaultDetails details = new PingFaultDetails();
>>>>           details.setDetail(ret.toString());
>>>>-            throw new PingException("from servant", details); 
>>>>+            throw new PingException("from servant", details);
>>>>       }
>>>>
>>>>       return ret;
>>>>-    } 
>>>>+    }
>>>>
>>>>
>>>>-    @Resource public void 
>>>>     
>>>>
>>>>        
>>>>
>>>setWebServiceContext(WebServiceContext ctx) { 
>>>   
>>>
>>>      
>>>
>>>>+    @Resource public void 
>>>>     
>>>>
>>>>        
>>>>
>>>setWebServiceContext(WebServiceContext ctx) {
>>>   
>>>
>>>      
>>>
>>>>       context = ctx;
>>>>   }
>>>>
>>>>   @SuppressWarnings("unchecked")
>>>>-    private List<String> getHandlersInfo(MessageContext ctx) { 
>>>>-        List<String> ret = (List<String>)ctx.get("handler.info"); 
>>>>+    private List<String> getHandlersInfo(MessageContext ctx) {
>>>>+        List<String> ret = (List<String>)ctx.get("handler.info");
>>>>       if (ret == null) {
>>>>-            ret = new ArrayList<String>(); 
>>>>+            ret = new ArrayList<String>();
>>>>       }
>>>>       return ret;
>>>>-    } 
>>>>+    }
>>>>
>>>>}
>>>>
>>>>Modified: 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/syst
>>>est/handlers/handlers.xml
>>>   
>>>
>>>      
>>>
>>>>URL: 
>>>>     
>>>>
>>>>        
>>>>
>>>http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/
>>>test/java/org/apache/cxf/systest/handlers/handlers.xml?view=di
>>>ff&rev=450934&r1=450933&r2=450934
>>>   
>>>
>>>      
>>>
>>>>=============================================================
>>>>     
>>>>
>>>>        
>>>>
>>>=================
>>>   
>>>
>>>      
>>>
>>>>--- 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/syst
>>>est/handlers/handlers.xml (original)
>>>   
>>>
>>>      
>>>
>>>>+++ 
>>>>     
>>>>
>>>>        
>>>>
>>>incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/syst
>>>est/handlers/handlers.xml Thu Sep 28 10:33:57 2006
>>>   
>>>
>>>      
>>>
>>>>@@ -1,4 +1,5 @@
>>>>- <!--
>>>>+<?xml version="1.0" encoding="UTF-8"?>
>>>>+<!--
>>>> 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
>>>>@@ -16,35 +17,34 @@
>>>> specific language governing permissions and limitations
>>>> under the License.
>>>>-->
>>>>-<handler-config> 
>>>>-  <handler-chain> 
>>>>-    <handler-chain-name>TestHandlerChain</handler-chain-name> 
>>>>-    <handler> 
>>>>-      <handler-name>Handler1</handler-name> 
>>>>-      
>>>>     
>>>>
>>>>        
>>>>
>>><handler-class>org.apache.cxf.systest.handlers.TestHandler</ha
>>>ndler-class> 
>>>   
>>>
>>>      
>>>
>>>>-    </handler> 
>>>>-    <handler> 
>>>>-      <handler-name>Handler2</handler-name> 
>>>>-      
>>>>     
>>>>
>>>>        
>>>>
>>><handler-class>org.apache.cxf.systest.handlers.TestHandler</ha
>>>ndler-class> 
>>>   
>>>
>>>      
>>>
>>>>-    </handler> 
>>>>-    <handler> 
>>>>-      <handler-name>ProtocolHandler1</handler-name> 
>>>>-      
>>>>     
>>>>
>>>>        
>>>>
>>><handler-class>org.apache.cxf.systest.handlers.TestSOAPHandler
>>></handler-class> 
>>>   
>>>
>>>      
>>>
>>>>-    </handler> 
>>>>-    <handler> 
>>>>-      <handler-name>ProtocolHandler2</handler-name> 
>>>>-      
>>>>     
>>>>
>>>>        
>>>>
>>><handler-class>org.apache.cxf.systest.handlers.TestSOAPHandler
>>></handler-class> 
>>>   
>>>
>>>      
>>>
>>>>-    </handler> 
>>>>-    <handler> 
>>>>-      <handler-name>StreamHandler1</handler-name> 
>>>>-      
>>>>     
>>>>
>>>>        
>>>>
>>><handler-class>org.apache.cxf.systest.handlers.TestStreamHandl
>>>er</handler-class> 
>>>   
>>>
>>>      
>>>
>>>>-    </handler> 
>>>>-  </handler-chain> 
>>>>-  <handler-chain>
>>>>-     <handler-chain-name>SingleHandlerChain</handler-chain-name> 
>>>>-     <handler> 
>>>>-      <handler-name>SingleHandler</handler-name> 
>>>>-      
>>>>     
>>>>
>>>>        
>>>>
>>><handler-class>org.apache.cxf.systest.handlers.TestHandler</ha
>>>ndler-class> 
>>>   
>>>
>>>      
>>>
>>>>-    </handler> 
>>>>-  </handler-chain>	  
>>>>-</handler-config> 
>>>>+<beans xmlns="http://www.springframework.org/schema/beans"
>>>>+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>>+       xmlns:javaee="http://java.sun.com/xml/ns/javaee"
>>>>+       
>>>>     
>>>>
>>>>        
>>>>
>>>xsi:schemaLocation="http://www.springframework.org/schema/bean
>>>s http://www.springframework.org/schema/beans/spring-beans.xsd">
>>>   
>>>
>>>      
>>>
>>>>+
>>>>+    <bean 
>>>>     
>>>>
>>>>        
>>>>
>>>id="org.apache.cxf.jaxws.javaee.HandlerConfigBean" abstract="true">
>>>   
>>>
>>>      
>>>
>>>>+        <property name="jaxwshandler">
>>>>+            <value>
>>>>+                <javaee:jaxwshandler>
>>>>+                    <javaee:handler>
>>>>+				
>>>>     
>>>>
>>>>        
>>>>
>>><javaee:handler-name>lh1</javaee:handler-name>
>>>   
>>>
>>>      
>>>
>>>>+				
>>>>     
>>>>
>>>>        
>>>>
>>><javaee:handler-class>org.apache.cxf.systest.handlers.TestSOAP
>>>Handler</javaee:handler-class>
>>>   
>>>
>>>      
>>>
>>>>+				<javaee:init-param>
>>>>+					
>>>>     
>>>>
>>>>        
>>>>
>>><javaee:param-name>token</javaee:param-name>
>>>   
>>>
>>>      
>>>
>>>>+					
>>>>     
>>>>
>>>>        
>>>>
>>><javaee:param-value>String</javaee:param-value>
>>>   
>>>
>>>      
>>>
>>>>+				</javaee:init-param>
>>>>+                    </javaee:handler>
>>>>+                    <javaee:handler>
>>>>+				
>>>>     
>>>>
>>>>        
>>>>
>>><javaee:handler-name>lh2</javaee:handler-name>
>>>   
>>>
>>>      
>>>
>>>>+				
>>>>     
>>>>
>>>>        
>>>>
>>><javaee:handler-class>org.apache.cxf.systest.handlers.TestSOAP
>>>Handler</javaee:handler-class>
>>>   
>>>
>>>      
>>>
>>>>+				<javaee:init-param>
>>>>+					
>>>>     
>>>>
>>>>        
>>>>
>>><javaee:param-name>token</javaee:param-name>
>>>   
>>>
>>>      
>>>
>>>>+					
>>>>     
>>>>
>>>>        
>>>>
>>><javaee:param-value>String</javaee:param-value>
>>>   
>>>
>>>      
>>>
>>>>+				</javaee:init-param>
>>>>+                    </javaee:handler>
>>>>+                </javaee:jaxwshandler>
>>>>+            </value>
>>>>+        </property>
>>>>+    </bean>
>>>>+    
>>>>+</beans>
>>>>\ No newline at end of file
>>>>
>>>>
>>>>
>>>>
>>>>     
>>>>
>>>>        
>>>>
>>>   
>>>
>>>      
>>>
>
>
>
>
>
>  
>


Mime
View raw message