You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ga...@apache.org on 2007/06/18 22:15:53 UTC
svn commit: r548475 - in /geronimo/server/trunk/modules:
geronimo-axis-builder/
geronimo-axis-builder/src/main/java/org/apache/geronimo/axis/builder/
geronimo-webservices-builder/src/main/java/org/apache/geronimo/webservices/builder/
geronimo-webservic...
Author: gawor
Date: Mon Jun 18 13:15:51 2007
New Revision: 548475
URL: http://svn.apache.org/viewvc?view=rev&rev=548475
Log:
handle jaxrpc web services in javaee webservices.xml file
Added:
geronimo/server/trunk/modules/geronimo-webservices-builder/src/main/java/org/apache/geronimo/webservices/builder/SharedPortInfo.java (with props)
Modified:
geronimo/server/trunk/modules/geronimo-axis-builder/pom.xml
geronimo/server/trunk/modules/geronimo-axis-builder/src/main/java/org/apache/geronimo/axis/builder/AxisBuilder.java
geronimo/server/trunk/modules/geronimo-axis-builder/src/main/java/org/apache/geronimo/axis/builder/AxisModuleBuilderExtension.java
geronimo/server/trunk/modules/geronimo-webservices-builder/src/main/java/org/apache/geronimo/webservices/builder/PortInfo.java
geronimo/server/trunk/modules/geronimo-webservices-builder/src/main/java/org/apache/geronimo/webservices/builder/WSDescriptorParser.java
geronimo/server/trunk/modules/geronimo-webservices-builder/src/test/java/org/apache/geronimo/webservices/builder/ParsingTest.java
Modified: geronimo/server/trunk/modules/geronimo-axis-builder/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-axis-builder/pom.xml?view=diff&rev=548475&r1=548474&r2=548475
==============================================================================
--- geronimo/server/trunk/modules/geronimo-axis-builder/pom.xml (original)
+++ geronimo/server/trunk/modules/geronimo-axis-builder/pom.xml Mon Jun 18 13:15:51 2007
@@ -52,6 +52,11 @@
<artifactId>axis</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-ws-metadata_2.0_spec</artifactId>
+ </dependency>
+
</dependencies>
</project>
Modified: geronimo/server/trunk/modules/geronimo-axis-builder/src/main/java/org/apache/geronimo/axis/builder/AxisBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-axis-builder/src/main/java/org/apache/geronimo/axis/builder/AxisBuilder.java?view=diff&rev=548475&r1=548474&r2=548475
==============================================================================
--- geronimo/server/trunk/modules/geronimo-axis-builder/src/main/java/org/apache/geronimo/axis/builder/AxisBuilder.java (original)
+++ geronimo/server/trunk/modules/geronimo-axis-builder/src/main/java/org/apache/geronimo/axis/builder/AxisBuilder.java Mon Jun 18 13:15:51 2007
@@ -32,6 +32,7 @@
import java.util.Set;
import java.util.jar.JarFile;
+import javax.jws.WebService;
import javax.wsdl.Binding;
import javax.wsdl.BindingOperation;
import javax.wsdl.Definition;
@@ -42,6 +43,7 @@
import javax.wsdl.extensions.soap.SOAPBinding;
import javax.xml.namespace.QName;
import javax.xml.rpc.handler.HandlerInfo;
+import javax.xml.ws.WebServiceProvider;
import org.apache.axis.constants.Style;
import org.apache.axis.description.JavaServiceDesc;
@@ -124,8 +126,7 @@
}
}
- public boolean configurePOJO(GBeanData targetGBean, String servletName, Module module, String seiClassName, DeploymentContext context) throws DeploymentException {
- ClassLoader cl = context.getClassLoader();
+ public boolean configurePOJO(GBeanData targetGBean, String servletName, Module module, String servletClassName, DeploymentContext context) throws DeploymentException {
Map sharedContext = ((WebModule) module).getSharedContext();
Map portInfoMap = (Map) sharedContext.get(KEY);
PortInfo portInfo = (PortInfo) portInfoMap.get(servletName);
@@ -133,15 +134,25 @@
//not ours
return false;
}
+
+ ClassLoader cl = context.getClassLoader();
+ Class serviceClass = loadClass(servletClassName, cl);
+ if (isJAXWSWebService(serviceClass)) {
+ // This is a JAX-WS web service so ignore
+ return false;
+ }
+
+ portInfo.initialize(module.getModuleFile());
+
ServiceInfo serviceInfo = AxisServiceBuilder.createServiceInfo(portInfo, cl);
JavaServiceDesc serviceDesc = serviceInfo.getServiceDesc();
- targetGBean.setAttribute("pojoClassName", seiClassName);
+ targetGBean.setAttribute("pojoClassName", servletClassName);
RPCProvider provider = new POJOProvider();
SOAPService service = new SOAPService(null, provider, null);
service.setServiceDescription(serviceDesc);
- service.setOption("className", seiClassName);
+ service.setOption("className", servletClassName);
HandlerInfoChainFactory handlerInfoChainFactory = new HandlerInfoChainFactory(serviceInfo.getHandlerInfos());
service.setOption(org.apache.axis.Constants.ATTR_HANDLERINFOCHAIN, handlerInfoChainFactory);
@@ -180,6 +191,16 @@
//not ours
return false;
}
+
+ String beanClassName = (String)targetGBean.getAttribute("ejbClass");
+ Class serviceClass = loadClass(beanClassName, classLoader);
+ if (isJAXWSWebService(serviceClass)) {
+ // This is a JAX-WS web service so ignore
+ return false;
+ }
+
+ portInfo.initialize(module.getModuleFile());
+
ServiceInfo serviceInfo = AxisServiceBuilder.createServiceInfo(portInfo, classLoader);
targetGBean.setAttribute("serviceInfo", serviceInfo);
JavaServiceDesc serviceDesc = serviceInfo.getServiceDesc();
@@ -491,6 +512,19 @@
}
+ Class<?> loadClass(String className, ClassLoader loader) throws DeploymentException {
+ try {
+ return loader.loadClass(className);
+ } catch (ClassNotFoundException ex) {
+ throw new DeploymentException("Unable to load Web Service class: " + className);
+ }
+ }
+
+ static boolean isJAXWSWebService(Class clazz) {
+ return (clazz.isAnnotationPresent(WebService.class) ||
+ clazz.isAnnotationPresent(WebServiceProvider.class));
+ }
+
public static final GBeanInfo GBEAN_INFO;
static {
Modified: geronimo/server/trunk/modules/geronimo-axis-builder/src/main/java/org/apache/geronimo/axis/builder/AxisModuleBuilderExtension.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-axis-builder/src/main/java/org/apache/geronimo/axis/builder/AxisModuleBuilderExtension.java?view=diff&rev=548475&r1=548474&r2=548475
==============================================================================
--- geronimo/server/trunk/modules/geronimo-axis-builder/src/main/java/org/apache/geronimo/axis/builder/AxisModuleBuilderExtension.java (original)
+++ geronimo/server/trunk/modules/geronimo-axis-builder/src/main/java/org/apache/geronimo/axis/builder/AxisModuleBuilderExtension.java Mon Jun 18 13:15:51 2007
@@ -130,6 +130,9 @@
GBeanData ejbWebServiceGBean = new GBeanData(ejbWebServiceName, EjbWebServiceGBean.GBEAN_INFO);
+ ejbWebServiceGBean.setAttribute("ejbName", ejbName);
+ ejbWebServiceGBean.setAttribute("ejbClass", bean.ejbClass);
+
WebServiceBindingType wsBinding = wsBindingMap.get(ejbName);
if (wsBinding != null) {
List<String> ddVirtualHosts = wsBinding.getWebServiceVirtualHost();
@@ -169,6 +172,9 @@
ejbWebServiceGBean.setReferencePattern("EjbDeployment", sessionName);
}
+ ejbWebServiceGBean.clearAttribute("ejbName");
+ ejbWebServiceGBean.clearAttribute("ejbClass");
+
}
}
Modified: geronimo/server/trunk/modules/geronimo-webservices-builder/src/main/java/org/apache/geronimo/webservices/builder/PortInfo.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-webservices-builder/src/main/java/org/apache/geronimo/webservices/builder/PortInfo.java?view=diff&rev=548475&r1=548474&r2=548475
==============================================================================
--- geronimo/server/trunk/modules/geronimo-webservices-builder/src/main/java/org/apache/geronimo/webservices/builder/PortInfo.java (original)
+++ geronimo/server/trunk/modules/geronimo-webservices-builder/src/main/java/org/apache/geronimo/webservices/builder/PortInfo.java Mon Jun 18 13:15:51 2007
@@ -17,10 +17,14 @@
package org.apache.geronimo.webservices.builder;
import java.net.URI;
+import java.util.Map;
+import java.util.jar.JarFile;
+
import javax.wsdl.Definition;
import javax.wsdl.Port;
import javax.xml.namespace.QName;
+import org.apache.geronimo.common.DeploymentException;
import org.apache.geronimo.xbeans.j2ee.JavaWsdlMappingType;
import org.apache.geronimo.xbeans.j2ee.PortComponentHandlerType;
import org.apache.geronimo.xbeans.j2ee.ServiceEndpointInterfaceMappingType;
@@ -31,31 +35,28 @@
public class PortInfo {
private final String portComponentName;
private final QName portQName;
- private final SchemaInfoBuilder schemaInfoBuilder;
- private final JavaWsdlMappingType javaWsdlMapping;
- private final ServiceEndpointInterfaceMappingType seiMapping;
private final String seInterfaceName;
private final PortComponentHandlerType[] handlers;
- private final Port port;
private final URI contextURI;
+ private final SharedPortInfo sharedPortInfo;
+
+ // set after initialize is called
+ private SchemaInfoBuilder schemaInfoBuilder;
+ private JavaWsdlMappingType javaWsdlMapping;
+ private Port port;
+ private ServiceEndpointInterfaceMappingType seiMapping;
- private final String wsdlLocation;
-
- public PortInfo(String portComponentName, QName portQName, SchemaInfoBuilder schemaInfoBuilder, JavaWsdlMappingType javaWsdlMapping, String seiInterfaceName, PortComponentHandlerType[] handlers, Port port, ServiceEndpointInterfaceMappingType seiMapping, String wsdlLocation, URI contextURI) {
+ public PortInfo(SharedPortInfo sharedPortInfo, String portComponentName, QName portQName, String seiInterfaceName, PortComponentHandlerType[] handlers, URI contextURI) {
+ this.sharedPortInfo = sharedPortInfo;
this.portComponentName = portComponentName;
this.portQName = portQName;
- this.schemaInfoBuilder = schemaInfoBuilder;
- this.javaWsdlMapping = javaWsdlMapping;
this.seInterfaceName = seiInterfaceName;
this.handlers = handlers;
- this.port = port;
- this.seiMapping = seiMapping;
- this.wsdlLocation = wsdlLocation;
this.contextURI = contextURI;
}
public String getWsdlLocation() {
- return wsdlLocation;
+ return this.sharedPortInfo.getWsdlLocation();
}
public String getPortComponentName() {
@@ -65,15 +66,15 @@
public QName getPortQName() {
return portQName;
}
-
+
public Port getPort() {
return port;
}
-
+
public SchemaInfoBuilder getSchemaInfoBuilder() {
return schemaInfoBuilder;
}
-
+
public Definition getDefinition() {
return schemaInfoBuilder.getDefinition();
}
@@ -86,7 +87,6 @@
return seInterfaceName;
}
-
public ServiceEndpointInterfaceMappingType getServiceEndpointInterfaceMapping() {
return seiMapping;
}
@@ -97,5 +97,28 @@
public URI getContextURI() {
return contextURI;
+ }
+
+ public void initialize(JarFile moduleFile) throws DeploymentException {
+ this.sharedPortInfo.initialize(moduleFile);
+
+ this.schemaInfoBuilder = this.sharedPortInfo.getSchemaInfoBuilder();
+ this.javaWsdlMapping = this.sharedPortInfo.getJavaWsdlMapping();
+
+ QName portQName = getPortQName();
+ URI contextURI = getContextURI();
+ String portComponentName = getPortComponentName();
+ String seiInterfaceName = getServiceEndpointInterfaceName();
+
+ Map wsdlPortMap = this.schemaInfoBuilder.getPortMap();
+ Port wsdlPort = (Port) wsdlPortMap.get(portQName.getLocalPart());
+ if (wsdlPort == null) {
+ throw new DeploymentException("No WSDL Port definition for port-component " + portComponentName);
+ }
+ this.port = wsdlPort;
+
+ this.seiMapping = this.sharedPortInfo.getSEIMappings().get(seiInterfaceName);
+
+ this.schemaInfoBuilder.movePortLocation(portQName.getLocalPart(), contextURI.toString());
}
}
Added: geronimo/server/trunk/modules/geronimo-webservices-builder/src/main/java/org/apache/geronimo/webservices/builder/SharedPortInfo.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-webservices-builder/src/main/java/org/apache/geronimo/webservices/builder/SharedPortInfo.java?view=auto&rev=548475
==============================================================================
--- geronimo/server/trunk/modules/geronimo-webservices-builder/src/main/java/org/apache/geronimo/webservices/builder/SharedPortInfo.java (added)
+++ geronimo/server/trunk/modules/geronimo-webservices-builder/src/main/java/org/apache/geronimo/webservices/builder/SharedPortInfo.java Mon Jun 18 13:15:51 2007
@@ -0,0 +1,106 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.geronimo.webservices.builder;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.jar.JarFile;
+
+import org.apache.geronimo.common.DeploymentException;
+import org.apache.geronimo.xbeans.j2ee.JavaWsdlMappingType;
+import org.apache.geronimo.xbeans.j2ee.ServiceEndpointInterfaceMappingType;
+
+/**
+ * @version $Rev: 476049 $ $Date: 2006-11-16 23:35:17 -0500 (Thu, 16 Nov 2006) $
+ */
+public class SharedPortInfo {
+
+ private String jaxrpcMappingFile;
+ private String wsdlLocation;
+ private JavaWsdlMappingType javaWsdlMapping;
+ private SchemaInfoBuilder schemaInfoBuilder;
+
+ public SharedPortInfo(String wsdlLocation, String jaxrpcMappingFile) {
+ this.wsdlLocation = wsdlLocation;
+ this.jaxrpcMappingFile = jaxrpcMappingFile;
+ }
+
+ public String getWsdlLocation() {
+ return this.wsdlLocation;
+ }
+
+ public String getJaxrpcMappingFile() {
+ return this.jaxrpcMappingFile;
+ }
+
+ public void initialize(JarFile moduleFile) throws DeploymentException {
+ if (this.jaxrpcMappingFile == null) {
+ throw new DeploymentException("JAX-RPC mapping file is required.");
+ }
+ if (this.wsdlLocation == null) {
+ throw new DeploymentException("WSDL file is required.");
+ }
+
+ if (this.javaWsdlMapping == null) {
+ URI jaxrpcMappingURI;
+ try {
+ jaxrpcMappingURI = new URI(this.jaxrpcMappingFile);
+ } catch (URISyntaxException e) {
+ throw new DeploymentException("Could not construct jaxrpc mapping uri from "
+ + this.jaxrpcMappingFile);
+ }
+
+ this.javaWsdlMapping = WSDescriptorParser.readJaxrpcMapping(moduleFile, jaxrpcMappingURI);
+ }
+
+ if (this.schemaInfoBuilder == null) {
+ URI wsdlURI;
+ try {
+ wsdlURI = new URI(this.wsdlLocation);
+ } catch (URISyntaxException e) {
+ throw new DeploymentException("could not construct wsdl uri from "
+ + this.wsdlLocation);
+ }
+
+ this.schemaInfoBuilder = new SchemaInfoBuilder(moduleFile, wsdlURI);
+ }
+ }
+
+ public JavaWsdlMappingType getJavaWsdlMapping() {
+ return this.javaWsdlMapping;
+ }
+
+ public SchemaInfoBuilder getSchemaInfoBuilder() {
+ return schemaInfoBuilder;
+ }
+
+ public Map<String, ServiceEndpointInterfaceMappingType> getSEIMappings() {
+ if (this.javaWsdlMapping == null) {
+ return Collections.emptyMap();
+ }
+ HashMap<String, ServiceEndpointInterfaceMappingType> seiMappings = new HashMap<String, ServiceEndpointInterfaceMappingType>();
+ ServiceEndpointInterfaceMappingType[] mappings = this.javaWsdlMapping.getServiceEndpointInterfaceMappingArray();
+ for (ServiceEndpointInterfaceMappingType seiMapping : mappings) {
+ seiMappings.put(seiMapping.getServiceEndpointInterface().getStringValue().trim(), seiMapping);
+ }
+ return seiMappings;
+ }
+
+}
Propchange: geronimo/server/trunk/modules/geronimo-webservices-builder/src/main/java/org/apache/geronimo/webservices/builder/SharedPortInfo.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: geronimo/server/trunk/modules/geronimo-webservices-builder/src/main/java/org/apache/geronimo/webservices/builder/WSDescriptorParser.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-webservices-builder/src/main/java/org/apache/geronimo/webservices/builder/WSDescriptorParser.java?view=diff&rev=548475&r1=548474&r2=548475
==============================================================================
--- geronimo/server/trunk/modules/geronimo-webservices-builder/src/main/java/org/apache/geronimo/webservices/builder/WSDescriptorParser.java (original)
+++ geronimo/server/trunk/modules/geronimo-webservices-builder/src/main/java/org/apache/geronimo/webservices/builder/WSDescriptorParser.java Mon Jun 18 13:15:51 2007
@@ -34,7 +34,6 @@
import javax.wsdl.Definition;
import javax.wsdl.Operation;
-import javax.wsdl.Port;
import javax.xml.namespace.QName;
import javax.xml.rpc.handler.HandlerInfo;
import javax.xml.rpc.holders.BigDecimalHolder;
@@ -297,29 +296,13 @@
public static Map<String,PortInfo> parseWebServiceDescriptor(WebservicesType webservicesType, JarFile moduleFile, boolean isEJB, Map servletLocations) throws DeploymentException {
Map<String,PortInfo> portMap = new HashMap<String, PortInfo>();
WebserviceDescriptionType[] webserviceDescriptions = webservicesType.getWebserviceDescriptionArray();
- for (WebserviceDescriptionType webserviceDescription : webserviceDescriptions) {
- URI wsdlURI;
- try {
- wsdlURI = new URI(webserviceDescription.getWsdlFile().getStringValue().trim());
- } catch (URISyntaxException e) {
- throw new DeploymentException("could not construct wsdl uri from " + webserviceDescription.getWsdlFile().getStringValue(), e);
- }
- URI jaxrpcMappingURI;
- try {
- jaxrpcMappingURI = new URI(webserviceDescription.getJaxrpcMappingFile().getStringValue().trim());
- } catch (URISyntaxException e) {
- throw new DeploymentException("Could not construct jaxrpc mapping uri from " + webserviceDescription.getJaxrpcMappingFile(), e);
- }
- SchemaInfoBuilder schemaInfoBuilder = new SchemaInfoBuilder(moduleFile, wsdlURI);
- Map wsdlPortMap = schemaInfoBuilder.getPortMap();
-
- JavaWsdlMappingType javaWsdlMapping = readJaxrpcMapping(moduleFile, jaxrpcMappingURI);
- HashMap<String, ServiceEndpointInterfaceMappingType> seiMappings = new HashMap<String, ServiceEndpointInterfaceMappingType>();
- ServiceEndpointInterfaceMappingType[] mappings = javaWsdlMapping.getServiceEndpointInterfaceMappingArray();
- for (ServiceEndpointInterfaceMappingType seiMapping : mappings) {
- seiMappings.put(seiMapping.getServiceEndpointInterface().getStringValue(), seiMapping);
- }
-
+ SharedPortInfo sharedPortInfo;
+ for (WebserviceDescriptionType webserviceDescription : webserviceDescriptions) {
+ String wsdlLocation = webserviceDescription.getWsdlFile().getStringValue().trim();
+ String jaxrpcMappingFile = webserviceDescription.getJaxrpcMappingFile().getStringValue().trim();
+
+ sharedPortInfo = new SharedPortInfo(wsdlLocation, jaxrpcMappingFile);
+
PortComponentType[] portComponents = webserviceDescription.getPortComponentArray();
for (PortComponentType portComponent : portComponents) {
String portComponentName = portComponent.getPortComponentName().getStringValue().trim();
@@ -335,32 +318,90 @@
linkName = serviceImplBeanType.getServletLink().getStringValue().trim();
servletLocation = (String) servletLocations.get(linkName);
if (servletLocation == null) {
- throw new DeploymentException("No servlet mapping for port " + portQName);
+ throw new DeploymentException("No servlet mapping for port " + portComponentName);
}
- schemaInfoBuilder.movePortLocation(portQName.getLocalPart(), servletLocation);
} else {
linkName = serviceImplBeanType.getEjbLink().getStringValue().trim();
servletLocation = (String) servletLocations.get(linkName);
- servletLocation = schemaInfoBuilder.movePortLocation(portQName.getLocalPart(), servletLocation);
}
PortComponentHandlerType[] handlers = portComponent.getHandlerArray();
-
- Port port = (Port) wsdlPortMap.get(portQName.getLocalPart());
- if (port == null) {
- throw new DeploymentException("No WSDL Port definition for port-component " + portComponentName);
+
+ URI contextURI;
+ try {
+ contextURI = new URI(servletLocation);
+ } catch (URISyntaxException e) {
+ throw new DeploymentException("Could not construct URI for web service location");
}
- ServiceEndpointInterfaceMappingType seiMapping = seiMappings.get(seiInterfaceName);
+ PortInfo portInfo = new PortInfo(sharedPortInfo, portComponentName, portQName, seiInterfaceName, handlers, contextURI);
+
+ if (portMap.put(linkName, portInfo) != null) {
+ throw new DeploymentException("Ambiguous description of port associated with j2ee component " + linkName);
+ }
+ }
+ }
+ return portMap;
+ }
- String wsdlLocation = webserviceDescription.getWsdlFile().getStringValue().trim();
+ public static Map<String,PortInfo> parseWebServiceDescriptor(org.apache.geronimo.xbeans.javaee.WebservicesType webservicesType, JarFile moduleFile, boolean isEJB, Map servletLocations) throws DeploymentException {
+ Map<String,PortInfo> portMap = new HashMap<String, PortInfo>();
+ org.apache.geronimo.xbeans.javaee.WebserviceDescriptionType[] webserviceDescriptions = webservicesType.getWebserviceDescriptionArray();
+ SharedPortInfo sharedPortInfo;
+ for (org.apache.geronimo.xbeans.javaee.WebserviceDescriptionType webserviceDescription : webserviceDescriptions) {
+ String wsdlLocation = null;
+ if (webserviceDescription.isSetWsdlFile()) {
+ wsdlLocation = webserviceDescription.getWsdlFile().getStringValue().trim();
+ }
+ String jaxrpcMappingFile = null;
+ if (webserviceDescription.isSetJaxrpcMappingFile()) {
+ jaxrpcMappingFile = webserviceDescription.getJaxrpcMappingFile().getStringValue().trim();
+ }
+
+ sharedPortInfo = new SharedPortInfo(wsdlLocation, jaxrpcMappingFile);
+
+ org.apache.geronimo.xbeans.javaee.PortComponentType[] portComponents = webserviceDescription.getPortComponentArray();
+ for (org.apache.geronimo.xbeans.javaee.PortComponentType portComponent : portComponents) {
+ String portComponentName = portComponent.getPortComponentName().getStringValue().trim();
+ QName portQName = null;
+ if (portComponent.isSetWsdlPort()) {
+ portQName = portComponent.getWsdlPort().getQNameValue();
+ }
+ String seiInterfaceName = null;
+ if (portComponent.isSetServiceEndpointInterface()) {
+ seiInterfaceName = portComponent.getServiceEndpointInterface().getStringValue().trim();
+ }
+ org.apache.geronimo.xbeans.javaee.ServiceImplBeanType serviceImplBeanType = portComponent.getServiceImplBean();
+ if (isEJB == serviceImplBeanType.isSetServletLink()) {
+ throw new DeploymentException("Wrong kind of web service described in web service descriptor: expected " + (isEJB ? "EJB" : "POJO(Servlet)"));
+ }
+ String linkName;
+ String servletLocation;
+ if (serviceImplBeanType.isSetServletLink()) {
+ linkName = serviceImplBeanType.getServletLink().getStringValue().trim();
+ servletLocation = (String) servletLocations.get(linkName);
+ if (servletLocation == null) {
+ throw new DeploymentException("No servlet mapping for port " + portComponentName);
+ }
+ } else {
+ linkName = serviceImplBeanType.getEjbLink().getStringValue().trim();
+ servletLocation = (String) servletLocations.get(linkName);
+ }
+ PortComponentHandlerType[] handlers = null;
+ if (portComponent.getHandlerArray() != null) {
+ handlers = new PortComponentHandlerType[portComponent.getHandlerArray().length];
+ for (int i=0; i<portComponent.getHandlerArray().length; i++) {
+ handlers[i] = (PortComponentHandlerType)portComponent.getHandlerArray()[i].changeType(PortComponentHandlerType.type);
+ }
+ }
+
URI contextURI;
try {
contextURI = new URI(servletLocation);
} catch (URISyntaxException e) {
- throw new DeploymentException("Could not construct URI for web service location", e);
+ throw new DeploymentException("Could not construct URI for web service location");
}
- PortInfo portInfo = new PortInfo(portComponentName, portQName, schemaInfoBuilder, javaWsdlMapping, seiInterfaceName, handlers, port, seiMapping, wsdlLocation, contextURI);
+ PortInfo portInfo = new PortInfo(sharedPortInfo, portComponentName, portQName, seiInterfaceName, handlers, contextURI);
if (portMap.put(linkName, portInfo) != null) {
throw new DeploymentException("Ambiguous description of port associated with j2ee component " + linkName);
@@ -369,18 +410,21 @@
}
return portMap;
}
-
+
public static Map<String,PortInfo> parseWebServiceDescriptor(URL wsDDUrl, JarFile moduleFile, boolean isEJB, Map servletLocations) throws DeploymentException {
- WebservicesType webservicesType = getWebservicesType(wsDDUrl);
- if (webservicesType != null) {
- return parseWebServiceDescriptor(webservicesType, moduleFile, isEJB, servletLocations);
+ XmlObject webservicesType = getWebservicesType(wsDDUrl);
+ if (webservicesType instanceof WebservicesType) {
+ WebservicesType webServices = (WebservicesType)webservicesType;
+ return parseWebServiceDescriptor(webServices, moduleFile, isEJB, servletLocations);
+ } else if (webservicesType instanceof org.apache.geronimo.xbeans.javaee.WebservicesType) {
+ org.apache.geronimo.xbeans.javaee.WebservicesType webServices = (org.apache.geronimo.xbeans.javaee.WebservicesType)webservicesType;
+ return parseWebServiceDescriptor(webServices, moduleFile, isEJB, servletLocations);
} else {
return null;
}
-
}
-
- static WebservicesType getWebservicesType(URL wsDDUrl) throws DeploymentException {
+
+ static XmlObject getWebservicesType(URL wsDDUrl) throws DeploymentException {
try {
XmlObject webservicesDocumentUntyped = XmlObject.Factory.parse(wsDDUrl);
XmlCursor cursor = webservicesDocumentUntyped.newCursor();
@@ -389,31 +433,45 @@
while(cursor.toNextToken() != XmlCursor.TokenType.START) {}
}
QName qname = cursor.getName();
- if (!WebservicesDocument.type.getDocumentElementName().equals(qname)) {
- //not a jaxrpc/j2ee 1.4 webservices document.
- //TODO handle jaxrpc inside a jee5 webservices document.
+ if (WebservicesDocument.type.getDocumentElementName().equals(qname)) {
+ return getJ2EEWebServices(webservicesDocumentUntyped);
+ } else if (org.apache.geronimo.xbeans.javaee.WebservicesDocument.type.getDocumentElementName().equals(qname)) {
+ return getJavaEEWebServices(webservicesDocumentUntyped);
+ } else {
return null;
}
} finally {
cursor.dispose();
}
-
- WebservicesDocument webservicesDocument;
- if (webservicesDocumentUntyped instanceof WebservicesDocument) {
- webservicesDocument = (WebservicesDocument) webservicesDocumentUntyped;
- } else {
- webservicesDocument = (WebservicesDocument) webservicesDocumentUntyped.changeType(WebservicesDocument.type);
- }
- XmlBeansUtil.validateDD(webservicesDocument);
- return webservicesDocument.getWebservices();
} catch (XmlException e) {
throw new DeploymentException("Could not read descriptor document", e);
} catch (IOException e) {
return null;
}
-
}
+ private static XmlObject getJ2EEWebServices(XmlObject webservicesDocumentUntyped) throws XmlException {
+ WebservicesDocument webservicesDocument;
+ if (webservicesDocumentUntyped instanceof WebservicesDocument) {
+ webservicesDocument = (WebservicesDocument) webservicesDocumentUntyped;
+ } else {
+ webservicesDocument = (WebservicesDocument) webservicesDocumentUntyped.changeType(WebservicesDocument.type);
+ }
+ XmlBeansUtil.validateDD(webservicesDocument);
+ return webservicesDocument.getWebservices();
+ }
+
+ private static XmlObject getJavaEEWebServices(XmlObject webservicesDocumentUntyped) throws XmlException {
+ org.apache.geronimo.xbeans.javaee.WebservicesDocument webservicesDocument;
+ if (webservicesDocumentUntyped instanceof org.apache.geronimo.xbeans.javaee.WebservicesDocument) {
+ webservicesDocument = (org.apache.geronimo.xbeans.javaee.WebservicesDocument) webservicesDocumentUntyped;
+ } else {
+ webservicesDocument = (org.apache.geronimo.xbeans.javaee.WebservicesDocument) webservicesDocumentUntyped.changeType(org.apache.geronimo.xbeans.javaee.WebservicesDocument.type);
+ }
+ XmlBeansUtil.validateDD(webservicesDocument);
+ return webservicesDocument.getWebservices();
+ }
+
public static List<HandlerInfo> createHandlerInfoList(PortComponentHandlerType[] handlers, ClassLoader classLoader) throws DeploymentException {
List<HandlerInfo> list = new ArrayList<HandlerInfo>();
for (PortComponentHandlerType handler : handlers) {
Modified: geronimo/server/trunk/modules/geronimo-webservices-builder/src/test/java/org/apache/geronimo/webservices/builder/ParsingTest.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/modules/geronimo-webservices-builder/src/test/java/org/apache/geronimo/webservices/builder/ParsingTest.java?view=diff&rev=548475&r1=548474&r2=548475
==============================================================================
--- geronimo/server/trunk/modules/geronimo-webservices-builder/src/test/java/org/apache/geronimo/webservices/builder/ParsingTest.java (original)
+++ geronimo/server/trunk/modules/geronimo-webservices-builder/src/test/java/org/apache/geronimo/webservices/builder/ParsingTest.java Mon Jun 18 13:15:51 2007
@@ -121,7 +121,7 @@
public void testWebservicesJee5() throws Exception {
URL url = getClass().getClassLoader().getResource("webservices-jee5.xml");
- assertNull(WSDescriptorParser.getWebservicesType(url));
+ assertNotNull(WSDescriptorParser.getWebservicesType(url));
}
}