cxf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Daniel Kulp <dk...@apache.org>
Subject Re: svn commit: r590451 - in /incubator/cxf/trunk: api/src/main/java/org/apache/cxf/service/model/ rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ systests/src/test/java/org/apache/cxf/systest/jaxws/
Date Tue, 30 Oct 2007 21:31:56 GMT

It actually allows both clients and servers to work. 

For clients, the interface passed to the service.create thing won't have 
the methods so there really isn't a way to invoke it.

For servers, the operations that DO map to a method will work fine.   For 
others, when it tries to parse the request, it won't find a usable 
operation and a fault would be raised.

Dan


On Tuesday 30 October 2007, Glen Mazza wrote:
> You mean, allow *clients* to work if they don't have methods for some
> of the operations defined in the WSDL, correct?  If I understand
> correctly, that was the concern with CXF-940.
>
> Glen
>
> Am Dienstag, den 30.10.2007, 20:52 +0000 schrieb dkulp@apache.org:
> > Author: dkulp
> > Date: Tue Oct 30 13:52:52 2007
> > New Revision: 590451
> >
> > URL: http://svn.apache.org/viewvc?rev=590451&view=rev
> > Log:
> > CXF-940 - Allow services to work if they don't have methods for some
> > of the operations in the wsdl.  The methods it does have will work.
> >
> > Added:
> >    
> > incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ja
> >xws/DocLitWrappedCodeFirstServiceMissingOps.java   (with props)
> > Modified:
> >    
> > incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/B
> >indingInfo.java
> > incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/I
> >nterfaceInfo.java
> > incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/
> >service/factory/ReflectionServiceFactoryBean.java
> > incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/
> >service/factory/SimpleMessages.properties
> > incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ja
> >xws/ClientServerMiscTest.java
> >
> > Modified:
> > incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/B
> >indingInfo.java URL:
> > http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/o
> >rg/apache/cxf/service/model/BindingInfo.java?rev=590451&r1=590450&r2=
> >590451&view=diff
> > ====================================================================
> >========== ---
> > incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/B
> >indingInfo.java (original) +++
> > incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/B
> >indingInfo.java Tue Oct 30 13:52:52 2007 @@ -101,6 +101,20 @@
> >
> >          operations.put(operation.getName(), operation);
> >      }
> > +
> > +    /**
> > +     * Removes an operation from this service.
> > +     *
> > +     * @param operation the operation.
> > +     */
> > +    public void removeOperation(BindingOperationInfo operation) {
> > +        if (operation.getName() == null) {
> > +            throw new NullPointerException(
> > +                new Message("BINDING.OPERATION.NAME.NOT.NULL",
> > LOG).toString()); +        }
> > +
> > +        operations.remove(operation.getName());
> > +    }
> >
> >      /**
> >       * Returns the operation info with the given name, if found.
> >
> > Modified:
> > incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/I
> >nterfaceInfo.java URL:
> > http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/o
> >rg/apache/cxf/service/model/InterfaceInfo.java?rev=590451&r1=590450&r
> >2=590451&view=diff
> > ====================================================================
> >========== ---
> > incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/I
> >nterfaceInfo.java (original) +++
> > incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/I
> >nterfaceInfo.java Tue Oct 30 13:52:52 2007 @@ -85,6 +85,15 @@
> >      void addOperation(OperationInfo operation) {
> >          operations.put(operation.getName(), operation);
> >      }
> > +
> > +    /**
> > +     * Removes an operation from this service.
> > +     *
> > +     * @param operation the operation.
> > +     */
> > +    public void removeOperation(OperationInfo operation) {
> > +        operations.remove(operation.getName());
> > +    }
> >
> >      /**
> >       * Returns the operation info with the given name, if found.
> >
> > Modified:
> > incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/
> >service/factory/ReflectionServiceFactoryBean.java URL:
> > http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/simple/
> >src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactory
> >Bean.java?rev=590451&r1=590450&r2=590451&view=diff
> > ====================================================================
> >========== ---
> > incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/
> >service/factory/ReflectionServiceFactoryBean.java (original) +++
> > incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/
> >service/factory/ReflectionServiceFactoryBean.java Tue Oct 30 13:52:52
> > 2007 @@ -303,6 +303,7 @@
> >      }
> >
> >      protected void initializeWSDLOperations() {
> > +        List<OperationInfo> removes = new
> > ArrayList<OperationInfo>(); Method[] methods =
> > serviceClass.getMethods();
> >          Arrays.sort(methods, new MethodComparator());
> >
> > @@ -329,17 +330,29 @@
> >              }
> >
> >              if (selected == null) {
> > -                throw new ServiceConstructionException(new
> > Message("NO_METHOD_FOR_OP", LOG, o.getName())); +               
> > LOG.log(Level.WARNING, "NO_METHOD_FOR_OP", o.getName()); +          
> >      removes.add(o);
> > +            } else {
> > +                initializeWSDLOperation(intf, o, selected);
> >              }
> > -
> > -            initializeWSDLOperation(intf, o, selected);
> > +        }
> > +        for (OperationInfo op : removes) {
> > +            intf.removeOperation(op);
> >          }
> >
> >          //Some of the operations may have switched from unwrapped
> > to wrapped.  Update the bindings. for (ServiceInfo service :
> > getService().getServiceInfos()) { for (BindingInfo bi :
> > service.getBindings()) { +                List<BindingOperationInfo>
> > biremoves = new ArrayList<BindingOperationInfo>(); for
> > (BindingOperationInfo binfo : bi.getOperations()) { -               
> >     binfo.updateUnwrappedOperation();
> > +                    if (removes.contains(binfo.getOperationInfo()))
> > { +                        biremoves.add(binfo);
> > +                    } else {
> > +                        binfo.updateUnwrappedOperation();
> > +                    }
> > +                }
> > +                for (BindingOperationInfo binfo : biremoves) {
> > +                    bi.removeOperation(binfo);
> >                  }
> >              }
> >          }
> >
> > Modified:
> > incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/
> >service/factory/SimpleMessages.properties URL:
> > http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/simple/
> >src/main/java/org/apache/cxf/service/factory/SimpleMessages.propertie
> >s?rev=590451&r1=590450&r2=590451&view=diff
> > ====================================================================
> >========== ---
> > incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/
> >service/factory/SimpleMessages.properties (original) +++
> > incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/
> >service/factory/SimpleMessages.properties Tue Oct 30 13:52:52 2007 @@
> > -19,7 +19,7 @@
> >  #
> >  #
> >  COULD_NOT_FIND_PORTTYPE = Could not find portType named {0}
> > -NO_METHOD_FOR_OP = Could not find a matching method for operation
> > {0} +NO_METHOD_FOR_OP = Could not find a matching method for
> > operation {0}. Operation will be unavailable.
> > COULD_NOT_SET_WRAPPER_STYLE = Service class: {0} contains overloaded
> > operation can not use wrapper style USING_PROXY_FOR_SERVICE =
> > Service class: {0} is a java.lang.reflect.Proxy instance.  This is
> > known not to work well as \ annotations on the real instance are not
> > available.  We suggest overriding the ServiceClass via spring config
> > or \
> >
> > Modified:
> > incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ja
> >xws/ClientServerMiscTest.java URL:
> > http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/j
> >ava/org/apache/cxf/systest/jaxws/ClientServerMiscTest.java?rev=590451
> >&r1=590450&r2=590451&view=diff
> > ====================================================================
> >========== ---
> > incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ja
> >xws/ClientServerMiscTest.java (original) +++
> > incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ja
> >xws/ClientServerMiscTest.java Tue Oct 30 13:52:52 2007 @@ -198,6
> > +198,23 @@
> >      }
> >
> >      @Test
> > +    public void testMissingMethods() throws Exception {
> > +        QName portName = new
> > QName("http://cxf.apache.org/systest/jaxws/DocLitWrappedCodeFirstSer
> >vice", +                "DocLitWrappedCodeFirstServicePort");
> > +        QName servName = new
> > QName("http://cxf.apache.org/systest/jaxws/DocLitWrappedCodeFirstSer
> >vice", +                "DocLitWrappedCodeFirstService");
> > +
> > +        Service service = Service.create(new
> > URL(ServerMisc.DOCLIT_CODEFIRST_URL + "?wsdl"), +                   
> >   servName);
> > +        DocLitWrappedCodeFirstServiceMissingOps port =
> > service.getPort(portName, +                                 
> > DocLitWrappedCodeFirstServiceMissingOps.class); +
> > +        int[] ret = port.echoIntArray(new int[] {1, 2});
> > +        assertNotNull(ret);
> > +        //port.arrayOutput();
> > +    }
> > +
> > +    @Test
> >      public void testStringListOutDocLitNoWsdl() throws Exception {
> >          QName portName = new
> > QName("http://cxf.apache.org/systest/jaxws/DocLitWrappedCodeFirstSer
> >vice", "DocLitWrappedCodeFirstServicePort");
> >
> > Added:
> > incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ja
> >xws/DocLitWrappedCodeFirstServiceMissingOps.java URL:
> > http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/j
> >ava/org/apache/cxf/systest/jaxws/DocLitWrappedCodeFirstServiceMissing
> >Ops.java?rev=590451&view=auto
> > ====================================================================
> >========== ---
> > incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ja
> >xws/DocLitWrappedCodeFirstServiceMissingOps.java (added) +++
> > incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ja
> >xws/DocLitWrappedCodeFirstServiceMissingOps.java Tue Oct 30 13:52:52
> > 2007 @@ -0,0 +1,48 @@
> > +/**
> > + * Licensed to the Apache Software Foundation (ASF) under one
> > + * or more contributor license agreements. See the NOTICE file
> > + * distributed with this work for additional information
> > + * regarding copyright ownership. The ASF licenses this file
> > + * to you under the Apache License, Version 2.0 (the
> > + * "License"); you may not use this file except in compliance
> > + * with the License. You may obtain a copy of the License at
> > + *
> > + * http://www.apache.org/licenses/LICENSE-2.0
> > + *
> > + * Unless required by applicable law or agreed to in writing,
> > + * software distributed under the License is distributed on an
> > + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> > + * KIND, either express or implied. See the License for the
> > + * specific language governing permissions and limitations
> > + * under the License.
> > + */
> > +package org.apache.cxf.systest.jaxws;
> > +
> > +import java.util.Vector;
> > +
> > +import javax.jws.WebMethod;
> > +import javax.jws.WebParam;
> > +import javax.jws.WebService;
> > +import javax.jws.soap.SOAPBinding;
> > +
> > +
> > +@WebService(name = "DocLitWrappedCodeFirstService",
> > +            targetNamespace =
> > "http://cxf.apache.org/systest/jaxws/DocLitWrappedCodeFirstService")
> > +@SOAPBinding(style = SOAPBinding.Style.DOCUMENT,
> > +             use = SOAPBinding.Use.LITERAL)
> > +public interface DocLitWrappedCodeFirstServiceMissingOps {
> > +
> > +    @WebMethod
> > +    String[] arrayOutput();
> > +
> > +    @WebMethod
> > +    String arrayInput(
> > +            @WebParam(name = "input") String[] inputs);
> > +
> > +    @WebMethod
> > +    Vector<String> listOutput();
> > +
> > +    @WebMethod
> > +    int[] echoIntArray(int[] ar);
> > +
> > +}
> >
> > Propchange:
> > incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ja
> >xws/DocLitWrappedCodeFirstServiceMissingOps.java
> > --------------------------------------------------------------------
> >---------- svn:eol-style = native
> >
> > Propchange:
> > incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ja
> >xws/DocLitWrappedCodeFirstServiceMissingOps.java
> > --------------------------------------------------------------------
> >---------- svn:keywords = Rev Date



-- 
J. Daniel Kulp
Principal Engineer
IONA
P: 781-902-8727    C: 508-380-7194
daniel.kulp@iona.com
http://www.dankulp.com/blog

Mime
View raw message