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

Source Code of org.jboss.ws.metadata.builder.jaxws.JAXWSClientMetaDataBuilder

/*     */ package org.jboss.ws.metadata.builder.jaxws;
/*     */
/*     */ import java.io.IOException;
/*     */ import java.net.URL;
/*     */ import java.util.ArrayList;
/*     */ import java.util.Iterator;
/*     */ import java.util.List;
/*     */ import java.util.Properties;
/*     */ import javax.jws.soap.SOAPBinding;
/*     */ import javax.xml.namespace.QName;
/*     */ import javax.xml.ws.BindingType;
/*     */ import org.jboss.logging.Logger;
/*     */ import org.jboss.ws.WSException;
/*     */ import org.jboss.ws.annotation.EndpointConfig;
/*     */ import org.jboss.ws.core.jaxws.client.ServiceObjectFactoryJAXWS;
/*     */ import org.jboss.ws.core.soap.Style;
/*     */ import org.jboss.ws.extensions.policy.metadata.PolicyMetaDataBuilder;
/*     */ import org.jboss.ws.metadata.umdm.ClientEndpointMetaData;
/*     */ import org.jboss.ws.metadata.umdm.EndpointMetaData;
/*     */ import org.jboss.ws.metadata.umdm.EndpointMetaData.Type;
/*     */ import org.jboss.ws.metadata.umdm.OperationMetaData;
/*     */ 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.WSDLBinding;
/*     */ import org.jboss.ws.metadata.wsdl.WSDLBindingOperation;
/*     */ import org.jboss.ws.metadata.wsdl.WSDLDefinitions;
/*     */ import org.jboss.ws.metadata.wsdl.WSDLEndpoint;
/*     */ import org.jboss.ws.metadata.wsdl.WSDLInterface;
/*     */ import org.jboss.ws.metadata.wsdl.WSDLInterfaceOperation;
/*     */ import org.jboss.ws.metadata.wsdl.WSDLService;
/*     */ import org.jboss.ws.metadata.wsdl.WSDLUtils;
/*     */ import org.jboss.ws.metadata.wsdl.xmlschema.JBossXSModel;
/*     */ import org.jboss.wsf.common.ResourceLoaderAdapter;
/*     */ import org.jboss.wsf.spi.deployment.UnifiedVirtualFile;
/*     */ import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedCallPropertyMetaData;
/*     */ import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedPortComponentRefMetaData;
/*     */ import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedServiceRefMetaData;
/*     */ import org.jboss.wsf.spi.metadata.j2ee.serviceref.UnifiedStubPropertyMetaData;
/*     */
/*     */ public class JAXWSClientMetaDataBuilder extends JAXWSMetaDataBuilder
/*     */ {
/*     */   public ServiceMetaData buildMetaData(QName serviceName, URL wsdlURL, UnifiedVirtualFile vfsRoot)
/*     */   {
/*  73 */     if (wsdlURL == null) {
/*  74 */       throw new IllegalArgumentException("Invalid wsdlURL: " + wsdlURL);
/*     */     }
/*  76 */     log.debug("START buildMetaData: [service=" + serviceName + "]");
/*     */     try
/*     */     {
/*  79 */       UnifiedMetaData wsMetaData = new UnifiedMetaData(vfsRoot);
/*     */
/*  81 */       ServiceMetaData serviceMetaData = new ServiceMetaData(wsMetaData, serviceName);
/*  82 */       wsMetaData.addService(serviceMetaData);
/*     */
/*  84 */       serviceMetaData.setWsdlLocation(wsdlURL);
/*  85 */       WSDLDefinitions wsdlDefinitions = serviceMetaData.getWsdlDefinitions();
/*     */
/*  87 */       buildMetaDataInternal(serviceMetaData, wsdlDefinitions);
/*     */
/*  90 */       for (EndpointMetaData epMetaData : serviceMetaData.getEndpoints())
/*     */       {
/*  92 */         PolicyMetaDataBuilder policyBuilder = PolicyMetaDataBuilder.getClientSidePolicyMetaDataBuilder();
/*  93 */         policyBuilder.processPolicyExtensions(epMetaData, wsdlDefinitions);
/*     */       }
/*     */
/*  98 */       JBossXSModel schemaModel = WSDLUtils.getSchemaModel(wsdlDefinitions.getWsdlTypes());
/*  99 */       serviceMetaData.getTypesMetaData().setSchemaModel(schemaModel);
/*     */
/* 101 */       log.debug("END buildMetaData: " + wsMetaData);
/* 102 */       return serviceMetaData;
/*     */     }
/*     */     catch (RuntimeException rte)
/*     */     {
/* 106 */       throw rte;
/*     */     }
/*     */     catch (Exception ex) {
/*     */     }
/* 110 */     throw new WSException("Cannot build meta data: " + ex.getMessage(), ex);
/*     */   }
/*     */
/*     */   public ServiceMetaData buildMetaData(QName serviceName, URL wsdlURL)
/*     */   {
/* 118 */     return buildMetaData(serviceName, wsdlURL, new ResourceLoaderAdapter());
/*     */   }
/*     */
/*     */   private void buildMetaDataInternal(ServiceMetaData serviceMetaData, WSDLDefinitions wsdlDefinitions) throws IOException
/*     */   {
/* 123 */     QName serviceName = serviceMetaData.getServiceName();
/*     */
/* 126 */     WSDLService wsdlService = null;
/* 127 */     if (serviceName == null)
/*     */     {
/* 129 */       if (wsdlDefinitions.getServices().length != 1) {
/* 130 */         throw new IllegalArgumentException("Expected a single service element");
/*     */       }
/* 132 */       wsdlService = wsdlDefinitions.getServices()[0];
/* 133 */       serviceMetaData.setServiceName(wsdlService.getName());
/*     */     }
/*     */     else
/*     */     {
/* 137 */       wsdlService = wsdlDefinitions.getService(serviceName);
/*     */     }
/* 139 */     if (wsdlService == null)
/*     */     {
/* 141 */       List serviceNames = new ArrayList();
/* 142 */       for (WSDLService wsdls : wsdlDefinitions.getServices()) {
/* 143 */         serviceNames.add(wsdls.getName());
/*     */       }
/* 145 */       throw new IllegalArgumentException("Cannot obtain wsdl service: " + serviceName + " we have " + serviceNames);
/*     */     }
/*     */
/* 150 */     for (WSDLEndpoint wsdlEndpoint : wsdlService.getEndpoints())
/*     */     {
/* 152 */       QName bindingName = wsdlEndpoint.getBinding();
/* 153 */       WSDLBinding wsdlBinding = wsdlEndpoint.getWsdlService().getWsdlDefinitions().getBinding(bindingName);
/* 154 */       String bindingType = wsdlBinding.getType();
/* 155 */       if ((!"http://schemas.xmlsoap.org/wsdl/soap/".equals(bindingType)) && (!"http://schemas.xmlsoap.org/wsdl/soap12/".equals(bindingType)))
/*     */         continue;
/* 157 */       QName portName = wsdlEndpoint.getName();
/* 158 */       QName interfaceQName = wsdlEndpoint.getInterface().getName();
/* 159 */       ClientEndpointMetaData epMetaData = new ClientEndpointMetaData(serviceMetaData, portName, interfaceQName, EndpointMetaData.Type.JAXWS);
/* 160 */       epMetaData.setEndpointAddress(wsdlEndpoint.getAddress());
/* 161 */       serviceMetaData.addEndpoint(epMetaData);
/*     */
/* 164 */       initEndpointBinding(wsdlEndpoint, epMetaData);
/*     */
/* 167 */       initEndpointEncodingStyle(epMetaData);
/*     */
/* 169 */       setupOperationsFromWSDL(epMetaData, wsdlEndpoint);
/*     */
/* 172 */       bufferServiceRefContributions(epMetaData);
/*     */     }
/*     */   }
/*     */
/*     */   private void bufferServiceRefContributions(EndpointMetaData epMetaData)
/*     */   {
/* 184 */     UnifiedServiceRefMetaData serviceRefMetaData = ServiceObjectFactoryJAXWS.getServiceRefAssociation();
/*     */
/* 186 */     if (serviceRefMetaData != null)
/*     */     {
/* 188 */       for (UnifiedPortComponentRefMetaData portComp : serviceRefMetaData.getPortComponentRefs())
/*     */       {
/* 190 */         epMetaData.getServiceRefContrib().add(portComp);
/*     */       }
/*     */     }
/*     */   }
/*     */
/*     */   private void processServiceRefContributions(EndpointMetaData epMetaData)
/*     */   {
/* 202 */     Iterator it = epMetaData.getServiceRefContrib().iterator();
/*     */
/* 204 */     while (it.hasNext())
/*     */     {
/* 206 */       UnifiedPortComponentRefMetaData portComp = (UnifiedPortComponentRefMetaData)it.next();
/*     */
/* 208 */       if (epMetaData.matches(portComp))
/*     */       {
/* 210 */         log.debug("Processing service-ref contribution on portType: " + epMetaData.getPortTypeName());
/*     */
/* 213 */         if (portComp.getEnableMTOM().booleanValue())
/*     */         {
/* 215 */           String bindingId = epMetaData.getBindingId();
/* 216 */           if (bindingId.equals("http://schemas.xmlsoap.org/wsdl/soap/http"))
/* 217 */             epMetaData.setBindingId("http://schemas.xmlsoap.org/wsdl/soap/http?mtom=true");
/* 218 */           else if (bindingId.equals("http://www.w3.org/2003/05/soap/bindings/HTTP/")) {
/* 219 */             epMetaData.setBindingId("http://www.w3.org/2003/05/soap/bindings/HTTP/?mtom=true");
/*     */           }
/*     */         }
/*     */
/* 223 */         for (UnifiedStubPropertyMetaData stubProp : portComp.getStubProperties())
/*     */         {
/* 225 */           epMetaData.getProperties().put(stubProp.getPropName(), stubProp.getPropValue());
/*     */         }
/*     */
/* 229 */         for (UnifiedCallPropertyMetaData callProp : portComp.getCallProperties())
/*     */         {
/* 231 */           epMetaData.getProperties().put(callProp.getPropName(), callProp.getPropValue());
/*     */         }
/*     */       }
/*     */     }
/*     */   }
/*     */
/*     */   protected void setupOperationsFromWSDL(EndpointMetaData epMetaData, WSDLEndpoint wsdlEndpoint)
/*     */   {
/* 242 */     WSDLDefinitions wsdlDefinitions = wsdlEndpoint.getInterface().getWsdlDefinitions();
/*     */
/* 245 */     WSDLInterface wsdlInterface = wsdlEndpoint.getInterface();
/* 246 */     for (WSDLInterfaceOperation wsdlOperation : wsdlInterface.getOperations())
/*     */     {
/* 248 */       String opName = wsdlOperation.getName().toString();
/* 249 */       QName opQName = wsdlOperation.getName();
/*     */
/* 252 */       String javaName = opName.substring(0, 1).toLowerCase() + opName.substring(1);
/*     */
/* 254 */       OperationMetaData opMetaData = new OperationMetaData(epMetaData, opQName, javaName);
/* 255 */       epMetaData.addOperation(opMetaData);
/*     */
/* 258 */       String style = wsdlOperation.getStyle();
/* 259 */       epMetaData.setStyle("http://www.w3.org/2004/03/wsdl/style/iri".equals(style) ? Style.DOCUMENT : Style.RPC);
/*     */
/* 262 */       if ("http://www.w3.org/2004/08/wsdl/in-only".equals(wsdlOperation.getPattern())) {
/* 263 */         opMetaData.setOneWay(true);
/*     */       }
/*     */
/* 266 */       WSDLBinding wsdlBinding = wsdlDefinitions.getBindingByInterfaceName(wsdlInterface.getName());
/* 267 */       WSDLBindingOperation wsdlBindingOperation = wsdlBinding.getOperationByRef(opQName);
/* 268 */       if (wsdlBindingOperation != null)
/* 269 */         opMetaData.setSOAPAction(wsdlBindingOperation.getSOAPAction());
/*     */     }
/*     */   }
/*     */
/*     */   public void rebuildEndpointMetaData(EndpointMetaData epMetaData, Class<?> wsClass)
/*     */   {
/* 275 */     if (log.isDebugEnabled()) log.debug("START: rebuildMetaData");
/*     */
/* 278 */     resetMetaDataBuilder(epMetaData.getClassLoader());
/*     */
/* 281 */     epMetaData.setParameterStyle(null);
/*     */
/* 284 */     if (wsClass.isAnnotationPresent(BindingType.class)) {
/* 285 */       processBindingType(epMetaData, wsClass);
/*     */     }
/*     */
/* 288 */     if (wsClass.isAnnotationPresent(SOAPBinding.class)) {
/* 289 */       processSOAPBinding(epMetaData, wsClass);
/*     */     }
/*     */
/* 292 */     processEndpointConfig(epMetaData, wsClass);
/* 293 */     epMetaData.initEndpointConfig();
/*     */
/* 296 */     processHandlerChain(epMetaData, wsClass);
/*     */
/* 299 */     processWebMethods(epMetaData, wsClass);
/*     */
/* 302 */     createJAXBContext(epMetaData);
/* 303 */     populateXmlTypes(epMetaData);
/*     */
/* 306 */     epMetaData.setServiceEndpointInterfaceName(wsClass.getName());
/*     */
/* 309 */     processServiceRefContributions(epMetaData);
/*     */
/* 313 */     epMetaData.eagerInitialize();
/*     */
/* 315 */     if (log.isDebugEnabled()) log.debug("END: rebuildMetaData\n" + epMetaData.getServiceMetaData());
/*     */   }
/*     */
/*     */   private void processEndpointConfig(EndpointMetaData epMetaData, Class<?> wsClass)
/*     */   {
/* 325 */     if (wsClass.isAnnotationPresent(EndpointConfig.class))
/*     */     {
/* 327 */       EndpointConfig anConfig = (EndpointConfig)wsClass.getAnnotation(EndpointConfig.class);
/* 328 */       epMetaData.setConfigName(anConfig.configName(), anConfig.configFile());
/*     */     }
/*     */   }
/*     */ }

/* 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.JAXWSClientMetaDataBuilder
* JD-Core Version:    0.6.0
*/
TOP

Related Classes of org.jboss.ws.metadata.builder.jaxws.JAXWSClientMetaDataBuilder

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.