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);
|