Author: chris.laprun(a)jboss.com
Date: 2009-08-28 17:06:23 -0400 (Fri, 28 Aug 2009)
New Revision: 13798
Modified:
jbossexo/modules/wsrp/trunk/consumer/pom.xml
jbossexo/modules/wsrp/trunk/consumer/src/main/java/org/jboss/portal/wsrp/consumer/InvocationHandler.java
jbossexo/modules/wsrp/trunk/consumer/src/main/java/org/jboss/portal/wsrp/handler/RequestHeaderClientHandler.java
jbossexo/modules/wsrp/trunk/consumer/src/main/java/org/jboss/portal/wsrp/services/RemoteSOAPInvokerServiceFactory.java
Log:
- Properly remove JAX-RPC code.
- Rewrote RemoteSOAPInvokerServiceFactory to use JAX-WS facility instead of parsing WSDL.
Needs to be tested.
Modified: jbossexo/modules/wsrp/trunk/consumer/pom.xml
===================================================================
--- jbossexo/modules/wsrp/trunk/consumer/pom.xml 2009-08-28 08:37:35 UTC (rev 13797)
+++ jbossexo/modules/wsrp/trunk/consumer/pom.xml 2009-08-28 21:06:23 UTC (rev 13798)
@@ -61,11 +61,6 @@
<version>${version.common}</version>
</dependency>
<dependency>
- <groupId>org.jboss.portal.registration</groupId>
- <artifactId>registration-api</artifactId>
- <version>1.0.0-SNAPSHOT</version>
- </dependency>
- <dependency>
<groupId>org.jboss.portal.portlet</groupId>
<artifactId>portlet-portlet</artifactId>
<version>${version.portlet}</version>
@@ -97,11 +92,6 @@
<!-- other dependencies -->
<dependency>
- <groupId>javax.xml</groupId>
- <artifactId>jaxrpc-api</artifactId>
- <version>${version.jaxrpc}</version>
- </dependency>
- <dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
<version>${version.slf4j}</version>
@@ -121,11 +111,6 @@
<artifactId>hibernate-core</artifactId>
<version>3.3.1.GA</version>
</dependency>
- <dependency>
- <groupId>wsdl4j</groupId>
- <artifactId>wsdl4j</artifactId>
- <version>1.6.2</version>
- </dependency>
</dependencies>
<build>
Modified:
jbossexo/modules/wsrp/trunk/consumer/src/main/java/org/jboss/portal/wsrp/consumer/InvocationHandler.java
===================================================================
---
jbossexo/modules/wsrp/trunk/consumer/src/main/java/org/jboss/portal/wsrp/consumer/InvocationHandler.java 2009-08-28
08:37:35 UTC (rev 13797)
+++
jbossexo/modules/wsrp/trunk/consumer/src/main/java/org/jboss/portal/wsrp/consumer/InvocationHandler.java 2009-08-28
21:06:23 UTC (rev 13798)
@@ -38,8 +38,6 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.xml.namespace.QName;
-import javax.xml.rpc.soap.SOAPFaultException;
import java.rmi.RemoteException;
/**
@@ -205,33 +203,6 @@
log.debug("Invalid registration");
consumer.handleInvalidRegistrationFault();
}
- else if (error instanceof RemoteException)
- {
- // todo: remove when we upgrade to 1.0.3+ see:
http://jira.jboss.com/jira/browse/JBWS-955
- RemoteException re = (RemoteException)error;
- Throwable detail = re.detail;
- if (detail instanceof SOAPFaultException)
- {
- SOAPFaultException faultException = (SOAPFaultException)detail;
- QName faultCode = faultException.getFaultCode();
- if (faultCode != null)
- {
- String localPart = faultCode.getLocalPart();
- if ("InvalidRegistration".equalsIgnoreCase(localPart))
- {
- consumer.handleInvalidRegistrationFault();
- }
- else if ("InvalidSession".equalsIgnoreCase(localPart))
- {
- sessionHandler.handleInvalidSessionFault(invocation, runtimeContext);
- }
- else
- {
- return new ErrorResponse(error);
- }
- }
- }
- }
else
{
// other errors cannot be dealt with: we have an error condition
Modified:
jbossexo/modules/wsrp/trunk/consumer/src/main/java/org/jboss/portal/wsrp/handler/RequestHeaderClientHandler.java
===================================================================
---
jbossexo/modules/wsrp/trunk/consumer/src/main/java/org/jboss/portal/wsrp/handler/RequestHeaderClientHandler.java 2009-08-28
08:37:35 UTC (rev 13797)
+++
jbossexo/modules/wsrp/trunk/consumer/src/main/java/org/jboss/portal/wsrp/handler/RequestHeaderClientHandler.java 2009-08-28
21:06:23 UTC (rev 13798)
@@ -31,14 +31,15 @@
import org.slf4j.LoggerFactory;
import javax.xml.namespace.QName;
-import javax.xml.rpc.Stub;
-import javax.xml.rpc.handler.GenericHandler;
-import javax.xml.rpc.handler.MessageContext;
-import javax.xml.rpc.handler.soap.SOAPMessageContext;
import javax.xml.soap.MimeHeaders;
import javax.xml.soap.SOAPMessage;
+import javax.xml.ws.BindingProvider;
+import javax.xml.ws.handler.MessageContext;
+import javax.xml.ws.handler.soap.SOAPHandler;
+import javax.xml.ws.handler.soap.SOAPMessageContext;
import java.net.MalformedURLException;
import java.net.URL;
+import java.util.Set;
/**
* A request handler that uses a thread local to setup cookies on the wire.
@@ -47,33 +48,55 @@
* @author <a
href="mailto:chris.laprun@jboss.com?subject=org.jboss.portal.wsrp.handler.RequestHeaderClientHandler">Chris
* Laprun</a>
*/
-public class RequestHeaderClientHandler extends GenericHandler
+public class RequestHeaderClientHandler implements SOAPHandler<SOAPMessageContext>
{
private static final ThreadLocal local = new ThreadLocal();
private static final RFC2109Spec cookieParser = new RFC2109Spec();
private static final Logger log =
LoggerFactory.getLogger(RequestHeaderClientHandler.class);
- public QName[] getHeaders()
+ public Set<QName> getHeaders()
{
return null;
}
- public boolean handleRequest(MessageContext msgContext)
+ public boolean handleMessage(SOAPMessageContext soapMessageContext)
{
+ // outbound message means request
+ if
(Boolean.TRUE.equals(soapMessageContext.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY)))
+ {
+ return handleRequest(soapMessageContext);
+ }
+ else
+ {
+ return handleResponse(soapMessageContext);
+ }
+ }
+
+ public boolean handleFault(SOAPMessageContext soapMessageContext)
+ {
+ return true;
+ }
+
+ public void close(MessageContext messageContext)
+ {
+ // nothing to do
+ }
+
+ public boolean handleRequest(SOAPMessageContext msgContext)
+ {
CurrentInfo info = getCurrentInfo(false);
if (info == null)
{
- return super.handleRequest(msgContext);
+ return true;
}
ProducerSessionInformation sessionInfo = info.sessionInfo;
if (sessionInfo == null)
{
- return super.handleRequest(msgContext);
+ return true;
}
- SOAPMessageContext smc = (SOAPMessageContext)msgContext;
- SOAPMessage message = smc.getMessage();
+ SOAPMessage message = msgContext.getMessage();
MimeHeaders mimeHeaders = message.getMimeHeaders();
StringBuffer cookie = new StringBuffer(64);
if (sessionInfo.isPerGroupCookies())
@@ -105,7 +128,7 @@
mimeHeaders.setHeader("Cookie", cookie.toString());
}
- return super.handleRequest(msgContext);
+ return true;
}
public boolean handleResponse(MessageContext msgContext)
@@ -119,7 +142,7 @@
{
String cookieValue = coalesceCookies(cookieValues);
- Cookie[] cookies =
extractCookies((String)msgContext.getProperty(Stub.ENDPOINT_ADDRESS_PROPERTY),
cookieValue);
+ Cookie[] cookies =
extractCookies((String)msgContext.get(BindingProvider.ENDPOINT_ADDRESS_PROPERTY),
cookieValue);
CurrentInfo info = getCurrentInfo(true);
ProducerSessionInformation sessionInfo = info.sessionInfo;
@@ -139,7 +162,7 @@
}
}
- return super.handleResponse(msgContext);
+ return true;
}
/**
Modified:
jbossexo/modules/wsrp/trunk/consumer/src/main/java/org/jboss/portal/wsrp/services/RemoteSOAPInvokerServiceFactory.java
===================================================================
---
jbossexo/modules/wsrp/trunk/consumer/src/main/java/org/jboss/portal/wsrp/services/RemoteSOAPInvokerServiceFactory.java 2009-08-28
08:37:35 UTC (rev 13797)
+++
jbossexo/modules/wsrp/trunk/consumer/src/main/java/org/jboss/portal/wsrp/services/RemoteSOAPInvokerServiceFactory.java 2009-08-28
21:06:23 UTC (rev 13798)
@@ -23,27 +23,18 @@
package org.jboss.portal.wsrp.services;
-import org.jboss.portal.common.io.IOTools;
-import org.jboss.portal.common.net.URLTools;
-import org.jboss.portal.common.util.ParameterValidation;
+import org.oasis.wsrp.v1.WSRPV1MarkupPortType;
+import org.oasis.wsrp.v1.WSRPV1PortletManagementPortType;
+import org.oasis.wsrp.v1.WSRPV1RegistrationPortType;
+import org.oasis.wsrp.v1.WSRPV1ServiceDescriptionPortType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.xml.sax.InputSource;
-import javax.wsdl.Definition;
-import javax.wsdl.Port;
-import javax.wsdl.WSDLException;
-import javax.wsdl.extensions.ExtensibilityElement;
-import javax.wsdl.extensions.soap.SOAPAddress;
-import javax.wsdl.factory.WSDLFactory;
-import javax.wsdl.xml.WSDLLocator;
import javax.xml.namespace.QName;
-import java.io.IOException;
-import java.io.InputStream;
+import javax.xml.ws.BindingProvider;
+import javax.xml.ws.Service;
import java.net.MalformedURLException;
import java.net.URL;
-import java.util.Collection;
-import java.util.Iterator;
/**
* @author <a href="mailto:chris.laprun@jboss.com">Chris
Laprun</a>
@@ -56,17 +47,12 @@
private String wsdlDefinitionURL;
- private static final String WSRP_URN = "urn:oasis:names:tc:wsrp:v1:wsdl";
- private static final String DEFAULT_SERVICE_NAME = "WSRPService";
+ private final static QName SERVICE = new
QName("urn:oasis:names:tc:wsrp:v1:wsdl", "WSRPService");
+ private final static QName WSRPServiceDescriptionService = new
QName("urn:oasis:names:tc:wsrp:v1:wsdl",
"WSRPServiceDescriptionService");
+ private final static QName WSRPBaseService = new
QName("urn:oasis:names:tc:wsrp:v1:wsdl", "WSRPBaseService");
+ private final static QName WSRPPortletManagementService = new
QName("urn:oasis:names:tc:wsrp:v1:wsdl",
"WSRPPortletManagementService");
+ private final static QName WSRPRegistrationService = new
QName("urn:oasis:names:tc:wsrp:v1:wsdl", "WSRPRegistrationService");
- // Used to heuristically determine which interface to use for a port based on its
name
- private static final String DESCRIPTION = "description";
- private static final String MARKUP = "markup";
- private static final String BASE = "base"; // some WSDL use WSRPBaseService
instead of Markup
- private static final String MANAGEMENT = "management";
- private static final String REGISTRATION = "registration";
-
-
public String getWsdlDefinitionURL()
{
return wsdlDefinitionURL;
@@ -107,227 +93,19 @@
private void initServices() throws MalformedURLException
{
- try
- {
- URL wsdlURL = new URL(wsdlDefinitionURL);
+ URL wsdlURL = new URL(wsdlDefinitionURL);
+ Service service = Service.create(wsdlURL, SERVICE);
- Definition def = getWSDLDefinition(wsdlURL);
- javax.wsdl.Service serve = def.getService(new QName(WSRP_URN,
DEFAULT_SERVICE_NAME));
- Collection ports = serve.getPorts().values();
- for (Object o : ports)
- {
- Port port = (Port)o;
- initServiceURL(port.getName(), getLocation(port));
- }
- }
- catch (WSDLException e)
- {
- throw new RuntimeException("Couldn't initialize services for WSDL at
'" + wsdlDefinitionURL + "'", e);
- }
- }
+ WSRPV1MarkupPortType markupPortType = service.getPort(WSRPBaseService,
WSRPV1MarkupPortType.class);
+ markupURL =
(String)((BindingProvider)markupPortType).getRequestContext().get(BindingProvider.ENDPOINT_ADDRESS_PROPERTY);
- /**
- * Heuristically try to determine which service we're trying to configure.
- *
- * @param serviceURL the port location as defined in the given WSDL file
- * @param portName the port name as defined in the given WSDL file
- */
- private void initServiceURL(String portName, String serviceURL)
- {
- String normalizedPortName = portName.toLowerCase();
- log.debug("Service URL: " + serviceURL);
+ WSRPV1ServiceDescriptionPortType sdPort =
service.getPort(WSRPServiceDescriptionService, WSRPV1ServiceDescriptionPortType.class);
+ serviceDescriptionURL =
(String)((BindingProvider)sdPort).getRequestContext().get(BindingProvider.ENDPOINT_ADDRESS_PROPERTY);
- if (doesString1ContainString2(normalizedPortName, DESCRIPTION))
- {
- log.info("Found service description port from port name: " +
portName);
- serviceDescriptionURL = serviceURL;
- return;
- }
- if (doesString1ContainString2(normalizedPortName, MARKUP) ||
doesString1ContainString2(normalizedPortName, BASE))
- {
- log.info("Found markup port from port name: " + portName);
- markupURL = serviceURL;
- return;
- }
- if (doesString1ContainString2(normalizedPortName, MANAGEMENT))
- {
- log.info("Found porlet management port from port name: " + portName);
- portletManagementURL = serviceURL;
- return;
- }
- if (doesString1ContainString2(normalizedPortName, REGISTRATION))
- {
- log.info("Found registration port from port name: " + portName);
- registrationURL = serviceURL;
- return;
- }
- log.warn("Could not find service port matching port name: " + portName);
- }
+ WSRPV1PortletManagementPortType managementPortType =
service.getPort(WSRPPortletManagementService, WSRPV1PortletManagementPortType.class);
+ portletManagementURL =
(String)((BindingProvider)managementPortType).getRequestContext().get(BindingProvider.ENDPOINT_ADDRESS_PROPERTY);
- private boolean doesString1ContainString2(String string1, String string2)
- {
- return string1.indexOf(string2) > 0;
+ WSRPV1RegistrationPortType registrationPortType =
service.getPort(WSRPRegistrationService, WSRPV1RegistrationPortType.class);
+ registrationURL =
(String)((BindingProvider)registrationPortType).getRequestContext().get(BindingProvider.ENDPOINT_ADDRESS_PROPERTY);
}
-
- //Requires wsdl4j
- private Definition getWSDLDefinition(URL url) throws WSDLException
- {
- log.info("Retrieving WSDL from " + url);
- WSDLFactory wsdlFactory = WSDLFactory.newInstance();
- javax.wsdl.xml.WSDLReader wsdlReader = wsdlFactory.newWSDLReader();
- try
- {
- return wsdlReader.readWSDL(new WSDLLocatorImpl(url));
- }
- catch (RuntimeException e)
- {
- throw new WSDLException(WSDLException.PARSER_ERROR, "Error while reading
WSDL", e);
- }
- }
-
-
- /** A WSDLLocator that can handle wsdl imports */
- public static class WSDLLocatorImpl implements WSDLLocator
- {
- private URL wsdlURL;
- private String latestImportURI;
- private final Logger log = LoggerFactory.getLogger(getClass());
- private static final int TIME_OUT_MS = 10000;
-
- private static final String XML_XSD = "http://www.w3.org/2001/xml.xsd";
- private static final String LOCAL_XML_XSD = "xsd/xml.xsd";
-
- public WSDLLocatorImpl(URL wsdlFile)
- {
- ParameterValidation.throwIllegalArgExceptionIfNull(wsdlFile, "WSDL
URL");
-
- this.wsdlURL = wsdlFile;
- }
-
- public void close()
- {
- // nothing to do since we don't hold any resources
- }
-
- public InputSource getBaseInputSource()
- {
- log.debug("getBaseInputSource [wsdlUrl=" + wsdlURL + "]");
-
- try
- {
- return new InputSource(URLTools.getContentAsInputStream(wsdlURL, TIME_OUT_MS,
TIME_OUT_MS));
- }
- catch (IOException e)
- {
- throw new RuntimeException("Couldn't retrieve WSDL for " +
wsdlURL, e);
- }
- }
-
- public String getBaseURI()
- {
- return wsdlURL.toExternalForm();
- }
-
- public InputSource getImportInputSource(String parent, String resource)
- {
- log.debug("getImportInputSource [parent=" + parent +
",resource=" + resource + "]");
-
- URL parentURL;
- try
- {
- parentURL = new URL(parent);
- }
- catch (MalformedURLException e)
- {
- log.error("Not a valid URL: " + parent);
- return null;
- }
-
- String wsdlImport;
- String external = parentURL.toExternalForm();
-
- // An external URL
- if (resource.startsWith("http://") ||
resource.startsWith("https://"))
- {
- wsdlImport = resource;
- if (XML_XSD.equals(resource))
- {
- InputStream is =
Thread.currentThread().getContextClassLoader().getResourceAsStream(LOCAL_XML_XSD);
- log.debug("Using local xml.xsd");
- return getWSDLImport(wsdlImport, is);
- }
- }
-
- // Absolute path
- else if (resource.startsWith("/"))
- {
- String beforePath = external.substring(0,
external.indexOf(parentURL.getPath()));
- wsdlImport = beforePath + resource;
- }
-
- // A relative path
- else
- {
- String parentDir = external.substring(0,
external.lastIndexOf("/"));
-
- // remove references to current dir
- while (resource.startsWith("./"))
- {
- resource = resource.substring(2);
- }
-
- // remove references to parentdir
- while (resource.startsWith("../"))
- {
- parentDir = parentDir.substring(0, parentDir.lastIndexOf("/"));
- resource = resource.substring(3);
- }
-
- wsdlImport = parentDir + "/" + resource;
- }
-
- try
- {
- return getWSDLImport(wsdlImport, new URL(wsdlImport).openStream());
- }
- catch (IOException e)
- {
- throw new RuntimeException("Cannot access imported wsdl [" +
wsdlImport + "], " + e.getMessage());
- }
- }
-
- private InputSource getWSDLImport(String wsdlImport, InputStream inputStream)
- {
- log.debug("Resolved to: " + wsdlImport);
- InputStream is = IOTools.safeBufferedWrapper(inputStream);
- if (is == null)
- {
- throw new IllegalArgumentException("Cannot import wsdl from [" +
wsdlImport + "]");
- }
-
- latestImportURI = wsdlImport;
- return new InputSource(is);
- }
-
- public String getLatestImportURI()
- {
- return latestImportURI;
- }
- }
-
- private String getLocation(Port port)
- {
- String loc = "";
- Iterator iter = port.getExtensibilityElements().iterator();
- while (iter.hasNext())
- {
- ExtensibilityElement ext = (ExtensibilityElement)iter.next();
- if (ext instanceof SOAPAddress)
- {
- SOAPAddress add = (SOAPAddress)ext;
- loc = add.getLocationURI();
- }
- }
- return loc;
- }
}