001 /** 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 package org.apache.geronimo.axis.server; 018 019 import org.apache.axis.description.JavaServiceDesc; 020 import org.apache.axis.handlers.soap.SOAPService; 021 import org.apache.axis.providers.java.RPCProvider; 022 import org.apache.geronimo.gbean.GBeanInfo; 023 import org.apache.geronimo.gbean.GBeanInfoBuilder; 024 import org.apache.geronimo.gbean.GBeanLifecycle; 025 import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory; 026 import org.apache.geronimo.openejb.EjbDeployment; 027 import org.apache.geronimo.webservices.SoapHandler; 028 import org.apache.openejb.server.axis.EjbContainerProvider; 029 030 import java.net.URI; 031 032 public class EjbWebServiceGBean implements GBeanLifecycle { 033 034 private final SoapHandler soapHandler; 035 private final URI location; 036 037 protected EjbWebServiceGBean() { 038 soapHandler = null; 039 location = null; 040 } 041 042 public EjbWebServiceGBean(EjbDeployment ejbDeploymentContext, 043 URI location, 044 URI wsdlURI, 045 SoapHandler soapHandler, 046 ServiceInfo serviceInfo, 047 String securityRealmName, 048 String realmName, 049 String transportGuarantee, 050 String authMethod, 051 String[] virtualHosts) throws Exception { 052 053 this.soapHandler = soapHandler; 054 this.location = location; 055 056 //for use as a template 057 if (ejbDeploymentContext == null) { 058 return; 059 } 060 RPCProvider provider = new EjbContainerProvider(ejbDeploymentContext.getDeploymentInfo(), serviceInfo.getHandlerInfos()); 061 SOAPService service = new SOAPService(null, provider, null); 062 063 JavaServiceDesc serviceDesc = serviceInfo.getServiceDesc(); 064 service.setServiceDescription(serviceDesc); 065 066 ClassLoader classLoader = ejbDeploymentContext.getClassLoader(); 067 068 Class serviceEndpointInterface = 069 classLoader.loadClass(ejbDeploymentContext.getServiceEndpointInterfaceName()); 070 071 service.setOption("className", serviceEndpointInterface.getName()); 072 serviceDesc.setImplClass(serviceEndpointInterface); 073 074 AxisWebServiceContainer axisContainer = new AxisWebServiceContainer(location, wsdlURI, service, serviceInfo.getWsdlMap(), classLoader); 075 if (soapHandler != null) { 076 soapHandler.addWebService(location.getPath(), virtualHosts, axisContainer, securityRealmName, realmName, transportGuarantee, authMethod, classLoader); 077 } 078 } 079 080 public void doStart() throws Exception { 081 082 } 083 084 public void doStop() throws Exception { 085 if (soapHandler != null) { 086 soapHandler.removeWebService(location.getPath()); 087 } 088 } 089 090 public void doFail() { 091 092 } 093 094 public static final GBeanInfo GBEAN_INFO; 095 096 static { 097 GBeanInfoBuilder infoFactory = GBeanInfoBuilder.createStatic(EjbWebServiceGBean.class, EjbWebServiceGBean.class, NameFactory.WEB_SERVICE_LINK); 098 099 // infoFactory.addOperation("invoke", new Class[]{WebServiceContainer.Request.class, WebServiceContainer.Response.class}); 100 101 infoFactory.addReference("EjbDeployment", EjbDeployment.class); 102 infoFactory.addAttribute("location", URI.class, true); 103 infoFactory.addAttribute("wsdlURI", URI.class, true); 104 infoFactory.addAttribute("securityRealmName", String.class, true); 105 infoFactory.addAttribute("realmName", String.class, true); 106 infoFactory.addAttribute("transportGuarantee", String.class, true); 107 infoFactory.addAttribute("authMethod", String.class, true); 108 infoFactory.addAttribute("serviceInfo", ServiceInfo.class, true); 109 infoFactory.addAttribute("virtualHosts", String[].class, true); 110 infoFactory.addReference("WebServiceContainer", SoapHandler.class); 111 112 infoFactory.setConstructor(new String[]{ 113 "EjbDeployment", 114 "location", 115 "wsdlURI", 116 "WebServiceContainer", 117 "serviceInfo", 118 "securityRealmName", 119 "realmName", 120 "transportGuarantee", 121 "authMethod", 122 "virtualHosts" 123 }); 124 125 GBEAN_INFO = infoFactory.getBeanInfo(); 126 } 127 128 public static GBeanInfo getGBeanInfo() { 129 return GBEAN_INFO; 130 } 131 132 133 }