Package org.jboss.ws.metadata.builder.jaxws

Source Code of org.jboss.ws.metadata.builder.jaxws.JAXWSWebServiceMetaDataBuilder$EndpointResult

/*     */ package org.jboss.ws.metadata.builder.jaxws;
/*     */
/*     */ import java.io.File;
/*     */ import java.io.IOException;
/*     */ import java.io.PrintStream;
/*     */ import java.io.Writer;
/*     */ import java.net.URL;
/*     */ import javax.jws.HandlerChain;
/*     */ import javax.jws.WebService;
/*     */ import javax.jws.soap.SOAPMessageHandlers;
/*     */ import javax.management.ObjectName;
/*     */ import javax.xml.namespace.QName;
/*     */ import org.jboss.logging.Logger;
/*     */ import org.jboss.ws.WSException;
/*     */ import org.jboss.ws.extensions.policy.annotation.PolicyAttachment;
/*     */ import org.jboss.ws.extensions.policy.metadata.PolicyMetaDataBuilder;
/*     */ import org.jboss.ws.metadata.builder.MetaDataBuilder;
/*     */ import org.jboss.ws.metadata.umdm.EndpointMetaData;
/*     */ import org.jboss.ws.metadata.umdm.EndpointMetaData.Type;
/*     */ import org.jboss.ws.metadata.umdm.HandlerMetaDataJAXWS;
/*     */ import org.jboss.ws.metadata.umdm.ServerEndpointMetaData;
/*     */ import org.jboss.ws.metadata.umdm.ServiceMetaData;
/*     */ import org.jboss.ws.metadata.umdm.TypesMetaData;
/*     */ import org.jboss.ws.metadata.umdm.UnifiedMetaData;
/*     */ import org.jboss.ws.metadata.wsdl.WSDLDefinitions;
/*     */ import org.jboss.ws.metadata.wsdl.WSDLTypes;
/*     */ import org.jboss.ws.metadata.wsdl.WSDLUtils;
/*     */ import org.jboss.ws.metadata.wsdl.xmlschema.JBossXSModel;
/*     */ import org.jboss.ws.metadata.wsse.WSSecurityConfigFactory;
/*     */ import org.jboss.ws.metadata.wsse.WSSecurityConfiguration;
/*     */ import org.jboss.ws.metadata.wsse.WSSecurityOMFactory;
/*     */ import org.jboss.ws.tools.ToolsUtils;
/*     */ import org.jboss.ws.tools.wsdl.JAXBWSDLGenerator;
/*     */ import org.jboss.ws.tools.wsdl.WSDLDefinitionsFactory;
/*     */ import org.jboss.ws.tools.wsdl.WSDLGenerator;
/*     */ import org.jboss.ws.tools.wsdl.WSDLWriter;
/*     */ import org.jboss.ws.tools.wsdl.WSDLWriterResolver;
/*     */ import org.jboss.wsf.common.IOUtils;
/*     */ import org.jboss.wsf.spi.deployment.ArchiveDeployment;
/*     */ import org.jboss.wsf.spi.deployment.Deployment;
/*     */ import org.jboss.wsf.spi.deployment.Endpoint;
/*     */ import org.jboss.wsf.spi.deployment.Service;
/*     */ import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedHandlerChainMetaData;
/*     */ import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedHandlerChainsMetaData;
/*     */ import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedHandlerMetaData;
/*     */ import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedHandlerMetaData.HandlerType;
/*     */ import org.jboss.wsf.spi.metadata.webservices.PortComponentMetaData;
/*     */ import org.jboss.wsf.spi.metadata.webservices.WebserviceDescriptionMetaData;
/*     */ import org.jboss.wsf.spi.metadata.webservices.WebservicesFactory;
/*     */ import org.jboss.wsf.spi.metadata.webservices.WebservicesMetaData;
/*     */
/*     */ public class JAXWSWebServiceMetaDataBuilder extends JAXWSServerMetaDataBuilder
/*     */ {
/*     */   private boolean generateWsdl;
/*     */   private boolean toolMode;
/*     */   private File wsdlDirectory;
/*     */   private PrintStream messageStream;
/*     */
/*     */   public JAXWSWebServiceMetaDataBuilder()
/*     */   {
/*  85 */     this.generateWsdl = true;
/*  86 */     this.toolMode = false;
/*  87 */     this.wsdlDirectory = null;
/*  88 */     this.messageStream = null;
/*     */   }
/*     */
/*     */   public void setGenerateWsdl(boolean generateWsdl)
/*     */   {
/* 101 */     this.generateWsdl = generateWsdl;
/*     */   }
/*     */
/*     */   public ServerEndpointMetaData buildWebServiceMetaData(Deployment dep, UnifiedMetaData wsMetaData, Class<?> sepClass, String linkName)
/*     */   {
/*     */     try
/*     */     {
/* 108 */       EndpointResult result = processWebService(dep, wsMetaData, sepClass, linkName);
/*     */
/* 111 */       ClassLoader runtimeClassLoader = dep.getRuntimeClassLoader();
/* 112 */       if (null == runtimeClassLoader)
/* 113 */         throw new IllegalArgumentException("Runtime loader cannot be null");
/* 114 */       resetMetaDataBuilder(runtimeClassLoader);
/*     */
/* 116 */       ServerEndpointMetaData sepMetaData = result.sepMetaData;
/* 117 */       ServiceMetaData serviceMetaData = result.serviceMetaData;
/* 118 */       serviceMetaData.setWsdlLocation(result.wsdlLocation);
/* 119 */       Class seiClass = result.epClass;
/*     */
/* 121 */       sepMetaData.setLinkName(linkName);
/* 122 */       sepMetaData.setServiceEndpointImplName(sepClass.getName());
/* 123 */       sepMetaData.setServiceEndpointInterfaceName(seiClass.getName());
/*     */
/* 126 */       WSSecurityConfigFactory wsseConfFactory = WSSecurityConfigFactory.newInstance();
/* 127 */       WSSecurityConfiguration securityConfiguration = wsseConfFactory.createConfiguration(wsMetaData.getRootFile(), WSSecurityOMFactory.SERVER_RESOURCE_NAME);
/* 128 */       serviceMetaData.setSecurityConfiguration(securityConfiguration);
/*     */
/* 131 */       processSOAPBinding(sepMetaData, seiClass);
/*     */
/* 134 */       processBindingType(sepMetaData, seiClass);
/*     */
/* 137 */       processEndpointConfig(dep, sepMetaData, sepClass, linkName);
/*     */
/* 140 */       processWebMethods(sepMetaData, seiClass);
/*     */
/* 143 */       initTransportGuaranteeJSE(dep, sepMetaData, linkName);
/*     */
/* 146 */       createJAXBContext(sepMetaData);
/* 147 */       populateXmlTypes(sepMetaData);
/*     */
/* 150 */       if (sepClass.isAnnotationPresent(PolicyAttachment.class))
/*     */       {
/* 152 */         PolicyMetaDataBuilder policyBuilder = PolicyMetaDataBuilder.getServerSidePolicyMetaDataBuilder(this.toolMode);
/* 153 */         policyBuilder.processPolicyAnnotations(sepMetaData, sepClass);
/*     */       }
/*     */
/* 157 */       if ((this.generateWsdl) || (!this.toolMode)) {
/* 158 */         processOrGenerateWSDL(seiClass, serviceMetaData, result.wsdlLocation, sepMetaData);
/*     */       }
/*     */
/* 161 */       if (this.toolMode) {
/* 162 */         return sepMetaData;
/*     */       }
/*     */
/* 166 */       WSDLDefinitions wsdlDefinitions = serviceMetaData.getWsdlDefinitions();
/* 167 */       JBossXSModel schemaModel = WSDLUtils.getSchemaModel(wsdlDefinitions.getWsdlTypes());
/* 168 */       serviceMetaData.getTypesMetaData().setSchemaModel(schemaModel);
/*     */
/* 171 */       processWebContext(dep, sepClass, linkName, sepMetaData);
/*     */
/* 174 */       sepMetaData.initEndpointConfig();
/*     */
/* 177 */       if (sepClass.isAnnotationPresent(HandlerChain.class))
/* 178 */         processHandlerChain(sepMetaData, sepClass);
/* 179 */       else if (seiClass.isAnnotationPresent(HandlerChain.class)) {
/* 180 */         processHandlerChain(sepMetaData, seiClass);
/*     */       }
/*     */
/* 183 */       processWSDDContribution(sepMetaData);
/*     */
/* 186 */       initEndpointAddress(dep, sepMetaData);
/*     */
/* 189 */       if ((sepClass.isAnnotationPresent(SOAPMessageHandlers.class)) || (seiClass.isAnnotationPresent(SOAPMessageHandlers.class))) {
/* 190 */         log.warn("@SOAPMessageHandlers is deprecated as of JAX-WS 2.0 with no replacement.");
/*     */       }
/* 192 */       MetaDataBuilder.replaceAddressLocation(sepMetaData);
/* 193 */       processEndpointMetaDataExtensions(sepMetaData, wsdlDefinitions);
/*     */
/* 196 */       ObjectName sepID = MetaDataBuilder.createServiceEndpointID(dep, sepMetaData);
/* 197 */       sepMetaData.setServiceEndpointID(sepID);
/*     */
/* 199 */       return sepMetaData;
/*     */     }
/*     */     catch (RuntimeException rte)
/*     */     {
/* 203 */       throw rte;
/*     */     }
/*     */     catch (Exception ex) {
/*     */     }
/* 207 */     throw new WSException("Cannot build meta data: " + ex.getMessage(), ex);
/*     */   }
/*     */
/*     */   private void processWSDDContribution(ServerEndpointMetaData sepMetaData)
/*     */   {
/* 219 */     WebservicesMetaData webservices = WebservicesFactory.loadFromVFSRoot(sepMetaData.getRootFile());
/* 220 */     if (webservices != null)
/*     */     {
/* 222 */       for (WebserviceDescriptionMetaData wsDesc : webservices.getWebserviceDescriptions())
/*     */       {
/* 224 */         for (PortComponentMetaData portComp : wsDesc.getPortComponents())
/*     */         {
/* 228 */           String portCompSEI = portComp.getServiceEndpointInterface();
/* 229 */           boolean doesMatch = portCompSEI != null ? portCompSEI.equals(sepMetaData.getServiceEndpointInterfaceName()) : false;
/* 230 */           if (!doesMatch)
/*     */           {
/* 232 */             doesMatch = portComp.getWsdlPort().equals(sepMetaData.getPortName());
/*     */           }
/*     */
/* 235 */           if (!doesMatch) {
/*     */             continue;
/*     */           }
/* 238 */           log.debug("Processing 'webservices.xml' contributions on EndpointMetaData");
/*     */
/* 241 */           if (portComp.getWsdlPort() != null)
/*     */           {
/* 243 */             log.debug("Override EndpointMetaData portName " + sepMetaData.getPortName() + " with " + portComp.getWsdlPort());
/* 244 */             sepMetaData.setPortName(portComp.getWsdlPort());
/*     */           }
/*     */
/* 248 */           UnifiedHandlerChainsMetaData chainWrapper = portComp.getHandlerChains();
/* 249 */           if (chainWrapper != null)
/*     */           {
/* 251 */             for (UnifiedHandlerChainMetaData handlerChain : chainWrapper.getHandlerChains())
/*     */             {
/* 253 */               for (UnifiedHandlerMetaData uhmd : handlerChain.getHandlers())
/*     */               {
/* 255 */                 log.debug("Contribute handler from webservices.xml: " + uhmd.getHandlerName());
/* 256 */                 HandlerMetaDataJAXWS hmd = HandlerMetaDataJAXWS.newInstance(uhmd, UnifiedHandlerMetaData.HandlerType.ENDPOINT);
/* 257 */                 sepMetaData.addHandler(hmd);
/*     */               }
/*     */             }
/*     */
/*     */           }
/*     */
/* 263 */           if (!portComp.isEnableMtom())
/*     */             continue;
/* 265 */           log.debug("Enabling MTOM");
/*     */
/* 267 */           String bindingId = sepMetaData.getBindingId();
/* 268 */           if (bindingId.equals("http://schemas.xmlsoap.org/wsdl/soap/http"))
/* 269 */             sepMetaData.setBindingId("http://schemas.xmlsoap.org/wsdl/soap/http?mtom=true");
/* 270 */           else if (bindingId.equals("http://www.w3.org/2003/05/soap/bindings/HTTP/"))
/* 271 */             sepMetaData.setBindingId("http://www.w3.org/2003/05/soap/bindings/HTTP/?mtom=true");
/*     */         }
/*     */       }
/*     */     }
/*     */   }
/*     */
/*     */   private EndpointResult processWebService(Deployment dep, UnifiedMetaData wsMetaData, Class<?> sepClass, String linkName)
/*     */     throws ClassNotFoundException, IOException
/*     */   {
/* 284 */     WebService anWebService = (WebService)sepClass.getAnnotation(WebService.class);
/* 285 */     if (anWebService == null) {
/* 286 */       throw new WSException("Cannot obtain @WebService annotation from: " + sepClass.getName());
/*     */     }
/* 288 */     Endpoint ep = dep.getService().getEndpointByName(linkName);
/*     */
/* 290 */     Class seiClass = null;
/*     */
/* 292 */     WSDLUtils wsdlUtils = WSDLUtils.getInstance();
/*     */
/* 294 */     String name = anWebService.name();
/* 295 */     if (name.length() == 0) {
/* 296 */       name = WSDLUtils.getJustClassName(sepClass);
/*     */     }
/* 298 */     String serviceName = anWebService.serviceName();
/* 299 */     if (serviceName.length() == 0) {
/* 300 */       serviceName = WSDLUtils.getJustClassName(sepClass) + "Service";
/*     */     }
/* 302 */     String serviceNS = anWebService.targetNamespace();
/* 303 */     if (serviceNS.length() == 0) {
/* 304 */       serviceNS = WSDLUtils.getTypeNamespace(sepClass);
/*     */     }
/* 306 */     String portName = anWebService.portName();
/* 307 */     if (portName.length() == 0) {
/* 308 */       portName = name + "Port";
/*     */     }
/* 310 */     String wsdlLocation = anWebService.wsdlLocation();
/* 311 */     String interfaceNS = serviceNS;
/*     */
/* 313 */     if (anWebService.endpointInterface().length() > 0)
/*     */     {
/* 315 */       String seiName = anWebService.endpointInterface();
/* 316 */       ClassLoader runtimeClassLoader = dep.getRuntimeClassLoader();
/* 317 */       if (null == runtimeClassLoader)
/* 318 */         throw new IllegalArgumentException("Runtime loader cannot be null");
/* 319 */       seiClass = runtimeClassLoader.loadClass(seiName);
/* 320 */       WebService seiAnnotation = (WebService)seiClass.getAnnotation(WebService.class);
/*     */
/* 322 */       if (seiAnnotation == null) {
/* 323 */         throw new WSException("Interface does not have a @WebService annotation: " + seiName);
/*     */       }
/* 325 */       if ((seiAnnotation.portName().length() > 0) || (seiAnnotation.serviceName().length() > 0) || (seiAnnotation.endpointInterface().length() > 0)) {
/* 326 */         throw new WSException("@WebService[portName,serviceName,endpointInterface] MUST NOT be defined on: " + seiName);
/*     */       }
/*     */
/* 329 */       name = seiAnnotation.name();
/* 330 */       if (name.length() == 0) {
/* 331 */         name = WSDLUtils.getJustClassName(seiClass);
/*     */       }
/* 333 */       interfaceNS = seiAnnotation.targetNamespace();
/* 334 */       if (interfaceNS.length() == 0) {
/* 335 */         interfaceNS = WSDLUtils.getTypeNamespace(seiClass);
/*     */       }
/*     */
/* 341 */       if (wsdlLocation.length() == 0) {
/* 342 */         wsdlLocation = seiAnnotation.wsdlLocation();
/*     */       }
/*     */     }
/*     */
/* 346 */     QName portQName = new QName(serviceNS, portName);
/* 347 */     QName portTypeQName = new QName(interfaceNS, name);
/*     */
/* 349 */     EndpointResult result = new EndpointResult(null);
/* 350 */     EndpointResult.access$102(result, new ServiceMetaData(wsMetaData, new QName(serviceNS, serviceName)));
/* 351 */     EndpointResult.access$002(result, new ServerEndpointMetaData(result.serviceMetaData, ep, portQName, portTypeQName, EndpointMetaData.Type.JAXWS));
/* 352 */     EndpointResult.access$302(result, seiClass != null ? seiClass : sepClass);
/* 353 */     result.serviceMetaData.addEndpoint(result.sepMetaData);
/* 354 */     wsMetaData.addService(result.serviceMetaData);
/*     */
/* 356 */     if ((dep instanceof ArchiveDeployment)) {
/* 357 */       EndpointResult.access$202(result, ((ArchiveDeployment)dep).getMetaDataFileURL(wsdlLocation));
/*     */     }
/* 359 */     return result;
/*     */   }
/*     */
/*     */   private void processOrGenerateWSDL(Class wsClass, ServiceMetaData serviceMetaData, URL wsdlLocation, EndpointMetaData epMetaData)
/*     */   {
/* 364 */     PolicyMetaDataBuilder policyBuilder = PolicyMetaDataBuilder.getServerSidePolicyMetaDataBuilder(this.toolMode);
/*     */     try
/*     */     {
/* 367 */       WSDLGenerator generator = new JAXBWSDLGenerator(this.jaxbCtx);
/* 368 */       WSDLDefinitionsFactory factory = WSDLDefinitionsFactory.newInstance();
/* 369 */       if (wsdlLocation != null)
/*     */       {
/* 373 */         WSDLDefinitions wsdlDefinitions = factory.parse(wsdlLocation);
/* 374 */         policyBuilder.processPolicyExtensions(epMetaData, wsdlDefinitions);
/*     */
/* 377 */         serviceMetaData.setWsdlLocation(wsdlLocation);
/*     */       }
/*     */       else
/*     */       {
/* 381 */         WSDLDefinitions wsdlDefinitions = generator.generate(serviceMetaData);
/* 382 */         writeWsdl(serviceMetaData, wsdlDefinitions, epMetaData);
/*     */       }
/*     */     }
/*     */     catch (RuntimeException rte)
/*     */     {
/* 387 */       throw rte;
/*     */     }
/*     */     catch (IOException e)
/*     */     {
/* 391 */       throw new WSException("Cannot write generated wsdl", e);
/*     */     }
/*     */   }
/*     */
/*     */   private void writeWsdl(ServiceMetaData serviceMetaData, WSDLDefinitions wsdlDefinitions, EndpointMetaData epMetaData)
/*     */     throws IOException
/*     */   {
/* 398 */     String wsdlName = ToolsUtils.firstLetterUpperCase(serviceMetaData.getServiceName().getLocalPart());
/*     */
/* 400 */     wsdlDefinitions.getWsdlTypes().setNamespace(epMetaData.getPortTypeName().getNamespaceURI());
/*     */     File wsdlFile;
/*     */     File dir;
/*     */     File wsdlFile;
/* 404 */     if (this.wsdlDirectory != null)
/*     */     {
/* 406 */       File dir = this.wsdlDirectory;
/* 407 */       wsdlFile = new File(dir, wsdlName + ".wsdl");
/*     */     }
/*     */     else
/*     */     {
/* 411 */       dir = IOUtils.createTempDirectory();
/* 412 */       wsdlFile = File.createTempFile(wsdlName, ".wsdl", dir);
/* 413 */       wsdlFile.deleteOnExit();
/*     */     }
/*     */
/* 416 */     message(wsdlFile.getName());
/* 417 */     Writer writer = IOUtils.getCharsetFileWriter(wsdlFile, "UTF-8");
/* 418 */     new WSDLWriter(wsdlDefinitions).write(writer, "UTF-8", new WSDLWriterResolver(dir)
/*     */     {
/*     */       public WSDLWriterResolver resolve(String suggestedFile)
/*     */         throws IOException
/*     */       {
/*     */         File file;
/*     */         File file;
/* 422 */         if (JAXWSWebServiceMetaDataBuilder.this.wsdlDirectory != null)
/*     */         {
/* 424 */           file = new File(this.val$dir, suggestedFile + ".wsdl");
/*     */         }
/*     */         else
/*     */         {
/* 428 */           file = File.createTempFile(suggestedFile, ".wsdl", this.val$dir);
/* 429 */           file.deleteOnExit();
/*     */         }
/* 431 */         this.actualFile = file.getName();
/* 432 */         JAXWSWebServiceMetaDataBuilder.this.message(this.actualFile);
/* 433 */         this.charset = "UTF-8";
/* 434 */         this.writer = IOUtils.getCharsetFileWriter(file, "UTF-8");
/* 435 */         return this;
/*     */       }
/*     */     });
/* 438 */     writer.close();
/*     */
/* 440 */     serviceMetaData.setWsdlLocation(wsdlFile.toURL());
/*     */   }
/*     */
/*     */   private void message(String msg)
/*     */   {
/* 445 */     if (this.messageStream != null)
/* 446 */       this.messageStream.println(msg);
/*     */   }
/*     */
/*     */   public void setToolMode(boolean toolMode)
/*     */   {
/* 451 */     this.toolMode = toolMode;
/*     */   }
/*     */
/*     */   public void setWsdlDirectory(File wsdlDirectory)
/*     */   {
/* 456 */     this.wsdlDirectory = wsdlDirectory;
/*     */   }
/*     */
/*     */   public void setMessageStream(PrintStream messageStream)
/*     */   {
/* 461 */     this.messageStream = messageStream;
/*     */   }
/*     */
/*     */   private static class EndpointResult
/*     */   {
/*     */     private Class<?> epClass;
/*     */     private ServerEndpointMetaData sepMetaData;
/*     */     private ServiceMetaData serviceMetaData;
/*     */     private URL wsdlLocation;
/*     */     private URL policyLocation;
/*     */   }
/*     */ }

/* Location:           /home/mnovotny/projects/EMBEDDED_JBOSS_BETA3_COMMUNITY/embedded/output/lib/embedded-jboss/lib/jboss-embedded-all.jar
* Qualified Name:     org.jboss.ws.metadata.builder.jaxws.JAXWSWebServiceMetaDataBuilder
* JD-Core Version:    0.6.0
*/
TOP

Related Classes of org.jboss.ws.metadata.builder.jaxws.JAXWSWebServiceMetaDataBuilder$EndpointResult

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.