< prev index next >

jaxws/src/jdk.xml.ws/share/classes/com/sun/tools/internal/ws/processor/modeler/annotation/WebServiceWrapperGenerator.java

Print this page


   1 /*
   2  * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any


 154         super(builder, context);
 155         makeSafeVisitor = new MakeSafeTypeVisitor(builder.getProcessingEnvironment());
 156     }
 157 
 158     @Override
 159     protected void processWebService(WebService webService, TypeElement d) {
 160         cm = new JCodeModel();
 161         wrapperNames = new HashSet<String>();
 162         processedExceptions = new HashSet<String>();
 163     }
 164 
 165     @Override
 166     protected void postProcessWebService(WebService webService, TypeElement d) {
 167         super.postProcessWebService(webService, d);
 168         doPostProcessWebService(webService, d);
 169     }
 170 
 171     @SuppressWarnings("CallToThreadDumpStack")
 172     protected void doPostProcessWebService(WebService webService, TypeElement d) {
 173         if (cm != null) {
 174             File sourceDir = builder.getSourceDir();
 175             assert(sourceDir != null);
 176             WsgenOptions options = builder.getOptions();

 177             try {
 178                 CodeWriter cw = new FilerCodeWriter(sourceDir, options);
 179                 if(options.verbose)
 180                     cw = new ProgressCodeWriter(cw, System.out);
 181                 cm.build(cw);
 182             } catch (IOException e) {
 183                 e.printStackTrace();
 184             }
 185         }
 186     }
 187 
 188     @Override
 189     protected void processMethod(ExecutableElement method, WebMethod webMethod) {
 190         builder.log("WrapperGen - method: "+method);
 191         builder.log("method.getDeclaringType(): " + method.asType());
 192         if (wrapped && soapStyle.equals(SOAPStyle.DOCUMENT)) {
 193             generateWrappers(method, webMethod);
 194         }
 195         generateExceptionBeans(method);
 196     }
 197 
 198     private boolean generateExceptionBeans(ExecutableElement method) {


 231         String operationName = builder.getOperationName(methodName);
 232         operationName = webMethod != null && webMethod.operationName().length() > 0 ?
 233                 webMethod.operationName() : operationName;
 234         String reqName = operationName;
 235         String resName = operationName + WebServiceConstants.RESPONSE.getValue();
 236         String reqNamespace = typeNamespace;
 237         String resNamespace = typeNamespace;
 238 
 239         String requestClassName = beanPackage + StringUtils.capitalize(method.getSimpleName().toString());
 240         RequestWrapper reqWrapper = method.getAnnotation(RequestWrapper.class);
 241         if (reqWrapper != null) {
 242             if (reqWrapper.className().length() > 0)
 243                 requestClassName = reqWrapper.className();
 244             if (reqWrapper.localName().length() > 0)
 245                 reqName = reqWrapper.localName();
 246             if (reqWrapper.targetNamespace().length() > 0)
 247                 reqNamespace = reqWrapper.targetNamespace();
 248         }
 249         builder.log("requestWrapper: "+requestClassName);
 250 ///// fix for wsgen CR 6442344
 251         File file = new File(DirectoryUtil.getOutputDirectoryFor(requestClassName, builder.getSourceDir()),
 252                 Names.stripQualifier(requestClassName) + GeneratorConstants.JAVA_SRC_SUFFIX.getValue());
 253         builder.getOptions().addGeneratedFile(file);
 254 //////////
 255         boolean canOverwriteRequest = builder.canOverWriteClass(requestClassName);
 256         if (!canOverwriteRequest) {
 257             builder.log("Class " + requestClassName + " exists. Not overwriting.");
 258         }
 259         if (duplicateName(requestClassName) && canOverwriteRequest) {
 260             builder.processError(WebserviceapMessages.WEBSERVICEAP_METHOD_REQUEST_WRAPPER_BEAN_NAME_NOT_UNIQUE(
 261                     typeElement.getQualifiedName(), method.toString()));
 262         }
 263 
 264         String responseClassName = null;
 265         boolean canOverwriteResponse = canOverwriteRequest;
 266         if (!isOneway) {
 267             responseClassName = beanPackage+StringUtils.capitalize(method.getSimpleName().toString())+RESPONSE.getValue();
 268             ResponseWrapper resWrapper = method.getAnnotation(ResponseWrapper.class);
 269             if(resWrapper != null) {
 270                 if (resWrapper.className().length() > 0)
 271                     responseClassName = resWrapper.className();
 272                 if (resWrapper.localName().length() > 0)
 273                     resName = resWrapper.localName();
 274                 if (resWrapper.targetNamespace().length() > 0)
 275                     resNamespace = resWrapper.targetNamespace();
 276             }
 277             canOverwriteResponse = builder.canOverWriteClass(responseClassName);
 278             if (!canOverwriteResponse) {
 279                 builder.log("Class " + responseClassName + " exists. Not overwriting.");
 280             }
 281             if (duplicateName(responseClassName) && canOverwriteResponse) {
 282                 builder.processError(WebserviceapMessages.WEBSERVICEAP_METHOD_RESPONSE_WRAPPER_BEAN_NAME_NOT_UNIQUE(
 283                         typeElement.getQualifiedName(), method.toString()));
 284             }
 285             file = new File(DirectoryUtil.getOutputDirectoryFor(responseClassName, builder.getSourceDir()),
 286                     Names.stripQualifier(responseClassName) + GeneratorConstants.JAVA_SRC_SUFFIX.getValue());
 287             builder.getOptions().addGeneratedFile(file);
 288         }
 289         //ArrayList<MemberInfo> reqMembers = new ArrayList<MemberInfo>();
 290         //ArrayList<MemberInfo> resMembers = new ArrayList<MemberInfo>();
 291         WrapperInfo reqWrapperInfo = new WrapperInfo(requestClassName);
 292         //reqWrapperInfo.setMembers(reqMembers);
 293         WrapperInfo resWrapperInfo = null;
 294         if (!isOneway) {
 295             resWrapperInfo = new WrapperInfo(responseClassName);
 296             //resWrapperInfo.setMembers(resMembers);
 297         }
 298         seiContext.setReqWrapperOperation(method, reqWrapperInfo);
 299         if (!isOneway)
 300             seiContext.setResWrapperOperation(method, resWrapperInfo);
 301         try {
 302             if (!canOverwriteRequest && !canOverwriteResponse) {
 303                 return false;
 304             }
 305 
 306             JDefinedClass reqCls = null;
 307             if (canOverwriteRequest) {


 317             writeXmlElementDeclaration(reqCls, reqName,reqNamespace);
 318             writeXmlElementDeclaration(resCls, resName, resNamespace);
 319 
 320             List<MemberInfo> reqMembers = ap_generator.collectRequestBeanMembers(method);
 321             List<MemberInfo> resMembers = ap_generator.collectResponseBeanMembers(method);
 322 
 323             // XmlType
 324             writeXmlTypeDeclaration(reqCls, reqName, reqNamespace, reqMembers);
 325             writeXmlTypeDeclaration(resCls, resName, resNamespace, resMembers);
 326 
 327             // class members
 328             writeMembers(reqCls, reqMembers);
 329             writeMembers(resCls, resMembers);
 330 
 331         } catch (Exception e) {
 332             throw new ModelerException("modeler.nestedGeneratorError",e);
 333         }
 334         return true;
 335     }
 336 






 337 //    private List<Annotation> collectJAXBAnnotations(Declaration decl) {
 338 //        List<Annotation> jaxbAnnotation = new ArrayList<Annotation>();
 339 //        for(Class jaxbClass : jaxbAnns) {
 340 //            Annotation ann = decl.getAnnotation(jaxbClass);
 341 //            if (ann != null) {
 342 //                jaxbAnnotation.add(ann);
 343 //            }
 344 //        }
 345 //        return jaxbAnnotation;
 346 //    }
 347 
 348     private TypeMirror getSafeType(TypeMirror type) {
 349         return makeSafeVisitor.visit(type, builder.getProcessingEnvironment().getTypeUtils());
 350     }
 351 
 352     private JType getType(TypeMirror typeMirror) {
 353         String type = typeMirror.toString();
 354         try {
 355 //            System.out.println("typeName: "+typeName);
 356             return cm.parseType(type);


 454             name = webFault.name().length()>0 ?
 455                    webFault.name() : name;
 456             className = webFault.faultBean().length()>0 ?
 457                         webFault.faultBean() : className;
 458 
 459         }
 460         JDefinedClass cls = getCMClass(className, CLASS);
 461         faultInfo = new FaultInfo(className, false);
 462 
 463         if (duplicateName(className)) {
 464             builder.processError(WebserviceapMessages.WEBSERVICEAP_METHOD_EXCEPTION_BEAN_NAME_NOT_UNIQUE(
 465                     typeElement.getQualifiedName(), thrownDecl.getQualifiedName()));
 466         }
 467 
 468         boolean canOverWriteBean = builder.canOverWriteClass(className);
 469         if (!canOverWriteBean) {
 470             builder.log("Class " + className + " exists. Not overwriting.");
 471             seiContext.addExceptionBeanEntry(thrownDecl.getQualifiedName(), faultInfo, builder);
 472             return false;
 473         }
 474         if (seiContext.getExceptionBeanName(thrownDecl.getQualifiedName()) != null)
 475             return false;



 476 
 477         //write class comment - JAXWS warning
 478         JDocComment comment = cls.javadoc();
 479         for (String doc : GeneratorBase.getJAXWSClassComment(ToolVersion.VERSION.MAJOR_VERSION)) {
 480             comment.add(doc);
 481         }
 482 
 483         // XmlElement Declarations
 484         writeXmlElementDeclaration(cls, name, namespace);
 485 
 486         // XmlType Declaration
 487         //members = sortMembers(members);
 488         XmlType xmlType = thrownDecl.getAnnotation(XmlType.class);
 489         String xmlTypeName = (xmlType != null && !xmlType.name().equals("##default")) ? xmlType.name() : exceptionName;
 490         String xmlTypeNamespace = (xmlType != null && !xmlType.namespace().equals("##default")) ? xmlType.namespace() : typeNamespace;
 491         writeXmlTypeDeclaration(cls, xmlTypeName, xmlTypeNamespace, members);
 492 
 493         writeMembers(cls, members);
 494 
 495         seiContext.addExceptionBeanEntry(thrownDecl.getQualifiedName(), faultInfo, builder);


   1 /*
   2  * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any


 154         super(builder, context);
 155         makeSafeVisitor = new MakeSafeTypeVisitor(builder.getProcessingEnvironment());
 156     }
 157 
 158     @Override
 159     protected void processWebService(WebService webService, TypeElement d) {
 160         cm = new JCodeModel();
 161         wrapperNames = new HashSet<String>();
 162         processedExceptions = new HashSet<String>();
 163     }
 164 
 165     @Override
 166     protected void postProcessWebService(WebService webService, TypeElement d) {
 167         super.postProcessWebService(webService, d);
 168         doPostProcessWebService(webService, d);
 169     }
 170 
 171     @SuppressWarnings("CallToThreadDumpStack")
 172     protected void doPostProcessWebService(WebService webService, TypeElement d) {
 173         if (cm != null) {


 174             WsgenOptions options = builder.getOptions();
 175             assert options.filer != null;
 176             try {
 177                 CodeWriter cw = new FilerCodeWriter(options);
 178                 if(options.verbose)
 179                     cw = new ProgressCodeWriter(cw, System.out);
 180                 cm.build(cw);
 181             } catch (IOException e) {
 182                 e.printStackTrace();
 183             }
 184         }
 185     }
 186 
 187     @Override
 188     protected void processMethod(ExecutableElement method, WebMethod webMethod) {
 189         builder.log("WrapperGen - method: "+method);
 190         builder.log("method.getDeclaringType(): " + method.asType());
 191         if (wrapped && soapStyle.equals(SOAPStyle.DOCUMENT)) {
 192             generateWrappers(method, webMethod);
 193         }
 194         generateExceptionBeans(method);
 195     }
 196 
 197     private boolean generateExceptionBeans(ExecutableElement method) {


 230         String operationName = builder.getOperationName(methodName);
 231         operationName = webMethod != null && webMethod.operationName().length() > 0 ?
 232                 webMethod.operationName() : operationName;
 233         String reqName = operationName;
 234         String resName = operationName + WebServiceConstants.RESPONSE.getValue();
 235         String reqNamespace = typeNamespace;
 236         String resNamespace = typeNamespace;
 237 
 238         String requestClassName = beanPackage + StringUtils.capitalize(method.getSimpleName().toString());
 239         RequestWrapper reqWrapper = method.getAnnotation(RequestWrapper.class);
 240         if (reqWrapper != null) {
 241             if (reqWrapper.className().length() > 0)
 242                 requestClassName = reqWrapper.className();
 243             if (reqWrapper.localName().length() > 0)
 244                 reqName = reqWrapper.localName();
 245             if (reqWrapper.targetNamespace().length() > 0)
 246                 reqNamespace = reqWrapper.targetNamespace();
 247         }
 248         builder.log("requestWrapper: "+requestClassName);
 249 ///// fix for wsgen CR 6442344
 250         addGeneratedFile(requestClassName);


 251 //////////
 252         boolean canOverwriteRequest = builder.canOverWriteClass(requestClassName);
 253         if (!canOverwriteRequest) {
 254             builder.log("Class " + requestClassName + " exists. Not overwriting.");
 255         }
 256         if (duplicateName(requestClassName) && canOverwriteRequest) {
 257             builder.processError(WebserviceapMessages.WEBSERVICEAP_METHOD_REQUEST_WRAPPER_BEAN_NAME_NOT_UNIQUE(
 258                     typeElement.getQualifiedName(), method.toString()));
 259         }
 260 
 261         String responseClassName = null;
 262         boolean canOverwriteResponse = canOverwriteRequest;
 263         if (!isOneway) {
 264             responseClassName = beanPackage+StringUtils.capitalize(method.getSimpleName().toString())+RESPONSE.getValue();
 265             ResponseWrapper resWrapper = method.getAnnotation(ResponseWrapper.class);
 266             if(resWrapper != null) {
 267                 if (resWrapper.className().length() > 0)
 268                     responseClassName = resWrapper.className();
 269                 if (resWrapper.localName().length() > 0)
 270                     resName = resWrapper.localName();
 271                 if (resWrapper.targetNamespace().length() > 0)
 272                     resNamespace = resWrapper.targetNamespace();
 273             }
 274             canOverwriteResponse = builder.canOverWriteClass(responseClassName);
 275             if (!canOverwriteResponse) {
 276                 builder.log("Class " + responseClassName + " exists. Not overwriting.");
 277             }
 278             if (duplicateName(responseClassName) && canOverwriteResponse) {
 279                 builder.processError(WebserviceapMessages.WEBSERVICEAP_METHOD_RESPONSE_WRAPPER_BEAN_NAME_NOT_UNIQUE(
 280                         typeElement.getQualifiedName(), method.toString()));
 281             }
 282             addGeneratedFile(responseClassName);


 283         }
 284         //ArrayList<MemberInfo> reqMembers = new ArrayList<MemberInfo>();
 285         //ArrayList<MemberInfo> resMembers = new ArrayList<MemberInfo>();
 286         WrapperInfo reqWrapperInfo = new WrapperInfo(requestClassName);
 287         //reqWrapperInfo.setMembers(reqMembers);
 288         WrapperInfo resWrapperInfo = null;
 289         if (!isOneway) {
 290             resWrapperInfo = new WrapperInfo(responseClassName);
 291             //resWrapperInfo.setMembers(resMembers);
 292         }
 293         seiContext.setReqWrapperOperation(method, reqWrapperInfo);
 294         if (!isOneway)
 295             seiContext.setResWrapperOperation(method, resWrapperInfo);
 296         try {
 297             if (!canOverwriteRequest && !canOverwriteResponse) {
 298                 return false;
 299             }
 300 
 301             JDefinedClass reqCls = null;
 302             if (canOverwriteRequest) {


 312             writeXmlElementDeclaration(reqCls, reqName,reqNamespace);
 313             writeXmlElementDeclaration(resCls, resName, resNamespace);
 314 
 315             List<MemberInfo> reqMembers = ap_generator.collectRequestBeanMembers(method);
 316             List<MemberInfo> resMembers = ap_generator.collectResponseBeanMembers(method);
 317 
 318             // XmlType
 319             writeXmlTypeDeclaration(reqCls, reqName, reqNamespace, reqMembers);
 320             writeXmlTypeDeclaration(resCls, resName, resNamespace, resMembers);
 321 
 322             // class members
 323             writeMembers(reqCls, reqMembers);
 324             writeMembers(resCls, resMembers);
 325 
 326         } catch (Exception e) {
 327             throw new ModelerException("modeler.nestedGeneratorError",e);
 328         }
 329         return true;
 330     }
 331 
 332     private void addGeneratedFile(String requestClassName) {
 333         File file = new File(DirectoryUtil.getOutputDirectoryFor(requestClassName, builder.getSourceDir()),
 334                 Names.stripQualifier(requestClassName) + GeneratorConstants.JAVA_SRC_SUFFIX.getValue());
 335         builder.getOptions().addGeneratedFile(file);
 336     }
 337 
 338 //    private List<Annotation> collectJAXBAnnotations(Declaration decl) {
 339 //        List<Annotation> jaxbAnnotation = new ArrayList<Annotation>();
 340 //        for(Class jaxbClass : jaxbAnns) {
 341 //            Annotation ann = decl.getAnnotation(jaxbClass);
 342 //            if (ann != null) {
 343 //                jaxbAnnotation.add(ann);
 344 //            }
 345 //        }
 346 //        return jaxbAnnotation;
 347 //    }
 348 
 349     private TypeMirror getSafeType(TypeMirror type) {
 350         return makeSafeVisitor.visit(type, builder.getProcessingEnvironment().getTypeUtils());
 351     }
 352 
 353     private JType getType(TypeMirror typeMirror) {
 354         String type = typeMirror.toString();
 355         try {
 356 //            System.out.println("typeName: "+typeName);
 357             return cm.parseType(type);


 455             name = webFault.name().length()>0 ?
 456                    webFault.name() : name;
 457             className = webFault.faultBean().length()>0 ?
 458                         webFault.faultBean() : className;
 459 
 460         }
 461         JDefinedClass cls = getCMClass(className, CLASS);
 462         faultInfo = new FaultInfo(className, false);
 463 
 464         if (duplicateName(className)) {
 465             builder.processError(WebserviceapMessages.WEBSERVICEAP_METHOD_EXCEPTION_BEAN_NAME_NOT_UNIQUE(
 466                     typeElement.getQualifiedName(), thrownDecl.getQualifiedName()));
 467         }
 468 
 469         boolean canOverWriteBean = builder.canOverWriteClass(className);
 470         if (!canOverWriteBean) {
 471             builder.log("Class " + className + " exists. Not overwriting.");
 472             seiContext.addExceptionBeanEntry(thrownDecl.getQualifiedName(), faultInfo, builder);
 473             return false;
 474         }
 475         if (seiContext.getExceptionBeanName(thrownDecl.getQualifiedName()) != null) {
 476             return false;
 477         }
 478 
 479         addGeneratedFile(className);
 480 
 481         //write class comment - JAXWS warning
 482         JDocComment comment = cls.javadoc();
 483         for (String doc : GeneratorBase.getJAXWSClassComment(ToolVersion.VERSION.MAJOR_VERSION)) {
 484             comment.add(doc);
 485         }
 486 
 487         // XmlElement Declarations
 488         writeXmlElementDeclaration(cls, name, namespace);
 489 
 490         // XmlType Declaration
 491         //members = sortMembers(members);
 492         XmlType xmlType = thrownDecl.getAnnotation(XmlType.class);
 493         String xmlTypeName = (xmlType != null && !xmlType.name().equals("##default")) ? xmlType.name() : exceptionName;
 494         String xmlTypeNamespace = (xmlType != null && !xmlType.namespace().equals("##default")) ? xmlType.namespace() : typeNamespace;
 495         writeXmlTypeDeclaration(cls, xmlTypeName, xmlTypeNamespace, members);
 496 
 497         writeMembers(cls, members);
 498 
 499         seiContext.addExceptionBeanEntry(thrownDecl.getQualifiedName(), faultInfo, builder);


< prev index next >