Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
   *
   * Copyright (c) 2010-2013 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
  * http://glassfish.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 com.sun.tools.ws.processor.modeler.annotation;
 
 
 import java.io.File;
 import java.util.Set;
WebServiceAp is a AnnotationProcessor for processing javax.jws.* and javax.xml.ws.* annotations. This class is used either by the WsGen (CompileTool) tool or indirectly when invoked by javac.

Author(s):
WS Development Team
 
         "javax.jws.HandlerChain",
         "javax.jws.Oneway",
         "javax.jws.WebMethod",
         "javax.jws.WebParam",
         "javax.jws.WebResult",
         "javax.jws.WebService",
         "javax.jws.soap.InitParam",
         "javax.jws.soap.SOAPBinding",
         "javax.jws.soap.SOAPMessageHandler",
         "javax.jws.soap.SOAPMessageHandlers",
         "javax.xml.ws.BindingType",
         "javax.xml.ws.RequestWrapper",
         "javax.xml.ws.ResponseWrapper",
        "javax.xml.ws.ServiceMode",
        "javax.xml.ws.WebEndpoint",
        "javax.xml.ws.WebFault",
        "javax.xml.ws.WebServiceClient",
        "javax.xml.ws.WebServiceProvider",
        "javax.xml.ws.WebServiceRef"
})
public class WebServiceAp extends AbstractProcessor implements ModelBuilder {
    private static final Logger LOGGER = Logger.getLogger(WebServiceAp.class);
    
    public static final String DO_NOT_OVERWRITE = "doNotOverWrite";
    public static final String IGNORE_NO_WEB_SERVICE_FOUND_WARNING = "ignoreNoWebServiceFoundWarning";
    private WsgenOptions options;
    private File sourceDir;
    private boolean doNotOverWrite;
    private boolean ignoreNoWebServiceFoundWarning = false;
    private TypeElement remoteElement;
    private TypeMirror exceptionElement;
    private TypeElement defHolderElement;
    private boolean isCommandLineInvocation;
    private PrintStream out;
    public WebServiceAp() {
        this. = new AnnotationProcessorContext();
    }
    public WebServiceAp(WsgenOptions optionsPrintStream out) {
        this. = options;
        this. = (options != null) ? options.sourceDir : null;
        this. = (options != null) && options.doNotOverWrite;
        this. = new AnnotationProcessorContext();
        this. = out;
    }
    @Override
    public synchronized void init(ProcessingEnvironment processingEnv) {
        super.init(processingEnv);
         = processingEnv.getElementUtils().getTypeElement(Remote.class.getName());
         = processingEnv.getElementUtils().getTypeElement(Exception.class.getName()).asType();
         = processingEnv.getElementUtils().getTypeElement(Holder.class.getName());
        if ( == null) {
             = new WsgenOptions();
             = new PrintStream(new ByteArrayOutputStream());
             = getOption();
            String classDir = parseArguments();
            String property = System.getProperty("java.class.path");
            . = classDir + . + (property != null ? property : "");
             = true;
        }
        . = processingEnv.getFiler();
    }
    private String parseArguments() {
        // let's try to parse JavacOptions
        String classDir = null;
        try {
            ClassLoader cl = WebServiceAp.class.getClassLoader();
            Class javacProcessingEnvironmentClass = Class.forName("com.sun.tools.javac.processing.JavacProcessingEnvironment"falsecl);
            if (javacProcessingEnvironmentClass.isInstance()) {
                Method getContextMethod = javacProcessingEnvironmentClass.getDeclaredMethod("getContext");
                Object tmpContext = getContextMethod.invoke();
                Class optionsClass = Class.forName("com.sun.tools.javac.util.Options"falsecl);
                Class contextClass = Class.forName("com.sun.tools.javac.util.Context"falsecl);
                Method instanceMethod = optionsClass.getDeclaredMethod("instance"new Class[]{contextClass});
                Object tmpOptions = instanceMethod.invoke(nulltmpContext);
                if (tmpOptions != null) {
                    Method getMethod = optionsClass.getDeclaredMethod("get"new Class[]{String.class});
                    Object result = getMethod.invoke(tmpOptions"-s"); // todo: we have to check for -d also
                    if (result != null) {
                        classDir = (Stringresult;
                    }
                    this.. = getMethod.invoke(tmpOptions"-verbose") != null;
                }
            }
        } catch (Exception e) {
            /// some Error was here - problems with reflection or security
            processWarning(WebserviceapMessages.WEBSERVICEAP_PARSING_JAVAC_OPTIONS_ERROR());
            report(e.getMessage());
        }
        if (classDir == null) { // some error within reflection block
            String property = System.getProperty("sun.java.command");
            if (property != null) {
                Scanner scanner = new Scanner(property);
                boolean sourceDirNext = false;
                while (scanner.hasNext()) {
                    String token = scanner.next();
                    if (sourceDirNext) {
                        classDir = token;
                        sourceDirNext = false;
                    } else if ("-verbose".equals(token)) {
                        . = true;
                    } else if ("-s".equals(token)) {
                        sourceDirNext = true;
                    }
                }
            }
        }
        if (classDir != null) {
             = new File(classDir);
        }
        return classDir;
    }
    private boolean getOption(String key) {
        String value = .getOptions().get(key);
        if (value != null) {
            return Boolean.valueOf(value);
        }
        return false;
    }
    @Override
    public boolean process(Set<? extends TypeElementannotationsRoundEnvironment roundEnv) {
        if (.getRound() != 1) {
            return true;
        }
        .incrementRound();
        WebService webService;
        WebServiceProvider webServiceProvider;
        WebServiceVisitor webServiceVisitor = new WebServiceWrapperGenerator(this);
        boolean processedEndpoint = false;
        Collection<TypeElementclasses = new ArrayList<TypeElement>();
        filterClasses(classesroundEnv.getRootElements());
        for (TypeElement element : classes) {
            webServiceProvider = element.getAnnotation(WebServiceProvider.class);
            webService = element.getAnnotation(WebService.class);
            if (webServiceProvider != null) {
                if (webService != null) {
                    processError(WebserviceapMessages.WEBSERVICEAP_WEBSERVICE_AND_WEBSERVICEPROVIDER(element.getQualifiedName()));
                }
                processedEndpoint = true;
            }
            if (webService == null) {
                continue;
            }
            element.accept(webServiceVisitornull);
            processedEndpoint = true;
        }
        if (!processedEndpoint) {
            if () {
                if (!) {
                    processWarning(WebserviceapMessages.WEBSERVICEAP_NO_WEBSERVICE_ENDPOINT_FOUND());
                }
            } else {
                processError(WebserviceapMessages.WEBSERVICEAP_NO_WEBSERVICE_ENDPOINT_FOUND());
            }
        }
        return true;
    }
    private void filterClasses(Collection<TypeElementclassesCollection<? extends Elementelements) {
        for (Element element : elements) {
            if (element.getKind().equals(.)) {
                classes.add((TypeElementelement);
                filterClasses(classes, ElementFilter.typesIn(element.getEnclosedElements()));
            }
        }
    }
    @Override
    public void processWarning(String message) {
        if () {
            .getMessager().printMessage(..message);
        } else {
            report(message);
        }
    }
    protected void report(String msg) {
        if ( == null) {
            if (.isLoggable(.)) {
                .log(."No output set for web service annotation processor reporting.");
            }
            return;
        }
        .println(msg);
        .flush();
    }
    @Override
    public void processError(String message) {
        if () {
            .getMessager().printMessage(..message);
            throw new AbortException();
        } else {
            throw new ModelerException(message);
        }
    }
    @Override
    public void processError(String messageElement element) {
        if () {
            .getMessager().printMessage(..messageelement);
        } else {
            throw new ModelerException(message);
        }
    }
    @Override
    public boolean canOverWriteClass(String className) {
        return !(( && GeneratorUtil.classExists(className)));
    }
    @Override
    public File getSourceDir() {
        return ;
    }
    @Override
    public boolean isRemote(TypeElement typeElement) {
        return .getTypeUtils().isSubtype(typeElement.asType(), .asType());
    }
    @Override
    public boolean isServiceException(TypeMirror typeMirror) {
        return .getTypeUtils().isSubtype(typeMirror)
                && !.getTypeUtils().isSubtype(typeMirror)
                && !.getTypeUtils().isSubtype(typeMirror);
    }
    @Override
    public TypeMirror getHolderValueType(TypeMirror type) {
        return TypeModeler.getHolderValueType(type);
    }
    @Override
    public boolean checkAndSetProcessed(TypeElement typeElement) {
        if (!.contains(typeElement)) {
            .add(typeElement);
            return false;
        }
        return true;
    }
    @Override
    public void log(String message) {
        if ( != null && .) {
            message = new StringBuilder().append('[').append(message).append(']').toString(); // "[%s]"
            .getMessager().printMessage(..message);
        }
    }
    @Override
    public WsgenOptions getOptions() {
        return ;
    }
    @Override
        return ;
    }
    @Override
    public String getOperationName(Name messageName) {
        return messageName != null ? messageName.toString() : null;
    }
    @Override
        return SourceVersion.latest();
    }
New to GrepCode? Check out our FAQ X