Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
   *
   * Copyright (c) 1997-2011 Oracle and/or its affiliates. All rights reserved.
   *
   * The contents of this file are subject to the terms of either the GNU
   * General Public License Version 2 only ("GPL") or the Common Development
   * and Distribution License("CDDL") (collectively, the "License").  You
   * may not use this file except in compliance with the License.  You can
  * obtain a copy of the License at
  * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
  * or packager/legal/LICENSE.txt.  See the License for the specific
  * language governing permissions and limitations under the License.
  *
  * When distributing the software, include this License Header Notice in each
  * file and include the License file at packager/legal/LICENSE.txt.
  *
  * GPL Classpath Exception:
  * Oracle designates this particular file as subject to the "Classpath"
  * exception as provided by Oracle in the GPL Version 2 section of the License
  * file that accompanied this code.
  *
  * Modifications:
  * If applicable, add the following below the License Header, with the fields
  * enclosed by brackets [] replaced by your own identifying information:
  * "Portions Copyright [year] [name of copyright owner]"
  *
  * Contributor(s):
  * If you wish your version of this file to be governed by only the CDDL or
  * only the GPL Version 2, indicate your decision by adding "[Contributor]
  * elects to include this software in this distribution under the [CDDL or GPL
  * Version 2] license."  If you don't indicate a single choice of license, a
  * recipient has the option to distribute your version of this file under
  * either the CDDL, the GPL Version 2 or to extend the choice of license to
  * its licensees as provided above.  However, if you add GPL Version 2 code
  * and therefore, elected the GPL Version 2 license, then the option applies
  * only if the new code is made subject to such option by the copyright
  * holder.
  */
 
 package org.glassfish.webservices;
 
 
 import java.util.Map;
 
 import java.util.List;
 
 
 
 //JAX-RPC SPI
 
This implementation of WsCompile should be used only internally at deployment time (or j2eec). Not meant to be overridden.

Author(s):
Kenneth Saks
 
 public final class WsCompile extends CompileToolDelegate {
 
     private Collection generatedFiles;
     private WebService webService;
     private WsUtil wsUtil = new WsUtil();
     private CompileTool wscompile;
     private JaxRpcObjectFactory rpcFactory;
 
     // if set, used to override standard configuration
     private ModelInfo modelInfo;
 
     // true if wscompile encountered an error.
     private boolean error = false;
 
     public WsCompile(CompileTool compileToolWebService webServiceDesc) {
          = compileTool;
          = webServiceDesc;
          = JaxRpcObjectFactory.newInstance();
     }
    public WsCompile(CompileTool compileTool
                     ServiceReferenceDescriptor serviceRefDesc) {
         = compileTool;
         = serviceRefDesc;
         = JaxRpcObjectFactory.newInstance();
    }
    public void setModelInfo(ModelInfo info) {
         = info;
    }
    public CompileTool getCompileTool() {
        return ;
    }

    
com.sun.xml.rpc.spi.tools.wscompile.CompileToolDelegate overrides.
        Configuration configuration = null;
        if != null ) {
            configuration = 
            configuration.setModelInfo();
        } 
        //else, leave it to the jaxrpc implementation to 
        //create Configuration
        return configuration;
    }
    public void preOnError() {
         = true;
    }
    public void postRegisterProcessorActions() {
        if( !) {
            if ( != null) {
                setupServiceHandlerChain();
            } 
            // NOTE : Client handler chains are configured at runtime.
        }
    }
    public void postRun() {
         = new HashSet();
        if( ! ) {
            for(Iterator iter = .getEnvironment().getGeneratedFiles();
                iter.hasNext(); ) {
                .additer.next() );
            }
            if != null ) {
                doServicePostProcessing();
            } else if != null ) {
                doClientPostProcessing();
            }
        }
    }
    //
    // WsCompile methods.
    //
    public Collection getGeneratedFiles() {
        return ;
    }
    private void setupServiceHandlerChain() {
        Model model = .getProcessor().getModel();
        Collection endpoints = .getEndpoints();
        for(Iterator eIter = endpoints.iterator(); eIter.hasNext();) {
            WebServiceEndpoint nextEndpoint = (WebServiceEndpointeIter.next();
            if( !nextEndpoint.hasHandlers() ) {
                continue;
            }
            Port port = .getPortFromModel(model
                                                nextEndpoint.getWsdlPort());
            ifport == null ) {
                throw new IllegalStateException("Model port for endpoint " + 
                                                nextEndpoint.getEndpointName() +
                                                " not found");
            }
            
            List handlerChain = nextEndpoint.getHandlers();
            HandlerChainInfo modelHandlerChain = 
                port.getServerHCI();
            List handlerInfoList = new ArrayList();
            // Insert an container handler as the first element.
            // This is needed to perform method authorization checks.
            HandlerInfo preHandler = .createHandlerInfo();
            String handlerClassName = nextEndpoint.implementedByEjbComponent() ?
                "org.glassfish.webservices.EjbContainerPreHandler" :
                "org.glassfish.webservices.ServletPreHandler";
            preHandler.setHandlerClassName(handlerClassName);
            handlerInfoList.add(preHandler);
            // Collect all roles defined on each handler and set them on
            // handler chain. NOTE : There is a bit of a mismatch here between 
            // 109 and JAXRPC.  JAXRPC only defines roles at the handler chain
            // level, whereas 109 descriptors put roles at the handler level.
            Collection soapRoles = new HashSet();            
            for(Iterator hIter = handlerChain.iterator(); hIter.hasNext();) {
                WebServiceHandler nextHandler = 
                    (WebServiceHandlerhIter.next();
                HandlerInfo handlerInfo = createHandlerInfo(nextHandler);
                handlerInfoList.add(handlerInfo);
                soapRoles.addAll(nextHandler.getSoapRoles());
            }
            // Insert a container handler as the last element in the chain.
            HandlerInfo postHandler = .createHandlerInfo();
            handlerClassName = nextEndpoint.implementedByEjbComponent() ?
                "org.glassfish.webservices.EjbContainerPostHandler" :
                "org.glassfish.webservices.ServletPostHandler";
            postHandler.setHandlerClassName(handlerClassName);
            handlerInfoList.add(postHandler);
            // @@@ should probably use addHandler api instead once
            // == bug is fixed.
            modelHandlerChain.setHandlersList(handlerInfoList);
            for(Iterator roleIter = soapRoles.iterator(); roleIter.hasNext();) {
                modelHandlerChain.addRole((StringroleIter.next());
            }
        }
    }
    private HandlerInfo createHandlerInfo(WebServiceHandler handler) {
        HandlerInfo handlerInfo = .createHandlerInfo();
        
        handlerInfo.setHandlerClassName(handler.getHandlerClass());
        for(Iterator iter = handler.getSoapHeaders().iterator(); 
            iter.hasNext();) {
            QName next = (QNameiter.next();
            handlerInfo.addHeaderName(next);
        }
        Map properties = handlerInfo.getProperties();
        for(Iterator iter = handler.getInitParams().iterator(); 
            iter.hasNext();) {
            NameValuePairDescriptor next = (NameValuePairDescriptor
                iter.next();
            properties.put(next.getName(), next.getValue());
        }
        return handlerInfo;
    }
    private void doServicePostProcessing() {
        Model model = .getProcessor().getModel();
        Collection endpoints = .getEndpoints();
        for(Iterator iter = endpoints.iterator(); iter.hasNext(); ) {
            WebServiceEndpoint next = (WebServiceEndpointiter.next();
            Service service = .getServiceForPort(model
                                                       next.getWsdlPort());
            ifservice == null ) {
                service = (Servicemodel.getServices().next();
                ..println("Warning : Can't find Service for Endpoint '"
                                   + next.getEndpointName() + "' Port '" +
                                   next.getWsdlPort() + "'");
                ..println("Defaulting to "service.getName());
            }
            QName serviceName = service.getName();
            next.setServiceNamespaceUri(serviceName.getNamespaceURI());
            next.setServiceLocalPart(serviceName.getLocalPart());
            Port port = .getPortFromModel(modelnext.getWsdlPort());
            ifport == null ) {
                String msg = "Can't find model port for endpoint " 
                    + next.getEndpointName() + " with wsdl-port " + 
                    next.getWsdlPort();
                throw new IllegalStateException(msg);
            }
            // If port has a tie class name property, use it.  Otherwise,
            // use naming convention to derive tie class name.  If there
            // are multiple ports per SEI(binding), then the property then
            // the TIE_CLASS_NAME property will be available.  In that case,
            // a separate tie and stub are generated per port.  
            String tieClassName = (String)
                port.getProperty(.);
            iftieClassName == null ) {
                tieClassName = next.getServiceEndpointInterface() + "_Tie";
            }
            next.setTieClassName(tieClassName);
            ifnext.implementedByWebComponent() ) {
                .updateServletEndpointRuntime(next);
            } else {
                .validateEjbEndpoint(next);
            }
            String endpointAddressUri = next.getEndpointAddressUri();
            ifendpointAddressUri == null ) {
                String msg = "Endpoint address uri must be set for endpoint " +
                    next.getEndpointName();
                throw new IllegalStateException(msg);
            } else ifendpointAddressUri.indexOf("*") >= 0 ) {
                String msg = "Endpoint address uri " + endpointAddressUri + 
                    " for endpoint " + next.getEndpointName() + 
                    " is invalid. It must not contain the '*' character";
                throw new IllegalStateException(msg);
            } else ifendpointAddressUri.endsWith("/") ) {
                String msg = "Endpoint address uri " + endpointAddressUri + 
                    " for endpoint " + next.getEndpointName() + 
                    " is invalid. It must not end with '/'";
                throw new IllegalStateException(msg);
            }
        }
    }
    private void doClientPostProcessing() {
        Model model = .getProcessor().getModel();
        Iterator serviceIter = model.getServices();
        Service service = null;
        if.hasServiceName() ) {
            whileserviceIter.hasNext() ) {
                Service next = (ServiceserviceIter.next();
                ifnext.getName().equals(.getServiceName()) ) {
                    service = next;
                    break;
                }
            }
            ifservice == null ) {
                throw new IllegalStateException
                    ("Service " + .getServiceName() + 
                     " for service-ref " + .getName() + " not found");
            }
        } else {
            ifserviceIter.hasNext() ) {
                service = (ServiceserviceIter.next();
                ifserviceIter.hasNext() ) {
                    throw new IllegalStateException
                        ("service ref " + .getName() + " must specify"
                         + " service name since its wsdl declares multiple"
                         + " services");
                }
                QName sName = service.getName();
                .setServiceNamespaceUri(sName.getNamespaceURI());
                .setServiceLocalPart(sName.getLocalPart());
            } else {
                throw new IllegalStateException
                    ("service ref " + .getName() + " WSDL must " +
                     "define at least one Service");
            }
        }
        // Use naming convention to derive Generated Service 
        // implementation class name.  
        String serviceImpl = service.getJavaIntf().getName() + "_Impl";
        .setServiceImplClassName(serviceImpl);
    }
New to GrepCode? Check out our FAQ X