cxf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Glen Mazza <glen.ma...@verizon.net>
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:51:14 GMT
I can understand clients still being allowed to run if the WSDL has been
expanded to accomodate more operations--if nothing else, Metro operates
that way.

But server-side, what you're saying is that a web service should be
allowed to operate inconsistently from its WSDL--i.e., not have a 1-to-1
mapping between operations and functions.  The benefits for allowing
that seem somewhat more questionable.

Glen


Am Dienstag, den 30.10.2007, 17:31 -0400 schrieb Daniel Kulp:
> 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
> 
> 
> 


Mime
View raw message