[Ds-java-dev] svn commit r18439 -
trunk/solutions/data-services/java/modules/core/src/main/java/org/wso2/ws/dataservice
sumedha at wso2.com
sumedha at wso2.com
Mon Jun 16 04:23:37 PDT 2008
Author: sumedha
Date: Mon Jun 16 04:23:37 2008
New Revision: 18439
URL: http://wso2.org/svn/browse/wso2?view=rev&revision=18439
Log:
merging changes from WSAS 2.3 branch
Modified:
trunk/solutions/data-services/java/modules/core/src/main/java/org/wso2/ws/dataservice/DBConstants.java
trunk/solutions/data-services/java/modules/core/src/main/java/org/wso2/ws/dataservice/DBDeployer.java
trunk/solutions/data-services/java/modules/core/src/main/java/org/wso2/ws/dataservice/DBUtils.java
Modified: trunk/solutions/data-services/java/modules/core/src/main/java/org/wso2/ws/dataservice/DBConstants.java
URL: http://wso2.org/svn/browse/wso2/trunk/solutions/data-services/java/modules/core/src/main/java/org/wso2/ws/dataservice/DBConstants.java?rev=18439&r1=18438&r2=18439&view=diff
==============================================================================
--- trunk/solutions/data-services/java/modules/core/src/main/java/org/wso2/ws/dataservice/DBConstants.java (original)
+++ trunk/solutions/data-services/java/modules/core/src/main/java/org/wso2/ws/dataservice/DBConstants.java Mon Jun 16 04:23:37 2008
@@ -65,6 +65,7 @@
public static final String MONEY = "MONEY";
public static final String SMALLMONEY = "SMALLMONEY";
public static final String BIT = "BIT";
+ public static final String BOOLEAN = "BOOLEAN";
public static final String TINYINT = "TINYINT";
public static final String SMALLINT = "SMALLINT";
public static final String INTEGER = "INTEGER";
Modified: trunk/solutions/data-services/java/modules/core/src/main/java/org/wso2/ws/dataservice/DBDeployer.java
URL: http://wso2.org/svn/browse/wso2/trunk/solutions/data-services/java/modules/core/src/main/java/org/wso2/ws/dataservice/DBDeployer.java?rev=18439&r1=18438&r2=18439&view=diff
==============================================================================
--- trunk/solutions/data-services/java/modules/core/src/main/java/org/wso2/ws/dataservice/DBDeployer.java (original)
+++ trunk/solutions/data-services/java/modules/core/src/main/java/org/wso2/ws/dataservice/DBDeployer.java Mon Jun 16 04:23:37 2008
@@ -23,11 +23,14 @@
import java.io.StringWriter;
import java.sql.SQLException;
import java.util.ArrayList;
+import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
+import java.util.TreeMap;
import javax.sql.DataSource;
import javax.xml.namespace.QName;
@@ -35,6 +38,8 @@
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+import org.apache.axiom.soap.SOAP11Constants;
+import org.apache.axiom.soap.SOAP12Constants;
import org.apache.axis2.AxisFault;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.deployment.Deployer;
@@ -43,14 +48,23 @@
import org.apache.axis2.deployment.DeploymentErrorMsgs;
import org.apache.axis2.deployment.DeploymentException;
import org.apache.axis2.deployment.repository.util.DeploymentFileData;
+import org.apache.axis2.description.AxisBinding;
+import org.apache.axis2.description.AxisBindingMessage;
+import org.apache.axis2.description.AxisBindingOperation;
+import org.apache.axis2.description.AxisEndpoint;
+import org.apache.axis2.description.AxisMessage;
import org.apache.axis2.description.AxisOperation;
import org.apache.axis2.description.AxisService;
import org.apache.axis2.description.AxisServiceGroup;
import org.apache.axis2.description.InOutAxisOperation;
import org.apache.axis2.description.Parameter;
+import org.apache.axis2.description.TransportInDescription;
+import org.apache.axis2.description.WSDL2Constants;
import org.apache.axis2.description.java2wsdl.Java2WSDLConstants;
import org.apache.axis2.engine.AxisConfiguration;
import org.apache.axis2.i18n.Messages;
+import org.apache.axis2.transport.http.util.RESTUtil;
+import org.apache.axis2.wsdl.WSDLConstants;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ws.commons.schema.utils.NamespaceMap;
@@ -66,6 +80,13 @@
private Config config;
private static HashMap conversionType = null;
private AxisService axisService = null;
+ Map httpLocationTable;
+ private final String HTTP_TRANSPORT = "http";
+ private final String HTTPS_TRANSPORT = "https";
+ private AxisBinding soap11Binding;
+ private AxisBinding soap12Binding;
+ private AxisBinding httpBinding;
+
private static HashMap getConversionTable() {
if (conversionType == null) {
@@ -79,6 +100,7 @@
conversionType.put(DBConstants.DataTypes.MONEY, "java.math.BigDecimal");
conversionType.put(DBConstants.DataTypes.SMALLMONEY, "java.math.BigDecimal");
conversionType.put(DBConstants.DataTypes.BIT, "boolean");
+ conversionType.put(DBConstants.DataTypes.BOOLEAN, "boolean");
conversionType.put(DBConstants.DataTypes.TINYINT, "byte");
conversionType.put(DBConstants.DataTypes.SMALLINT, "short");
conversionType.put(DBConstants.DataTypes.INTEGER, "int");
@@ -96,7 +118,7 @@
}
return conversionType;
}
- public void deploy(DeploymentFileData deploymentFileData) {
+ public void deploy(DeploymentFileData deploymentFileData) throws DeploymentException {
StringWriter errorWriter;
String serviceStatus;
errorWriter = new StringWriter();
@@ -116,6 +138,7 @@
PrintWriter error_ptintWriter = new PrintWriter(errorWriter);
de.printStackTrace(error_ptintWriter);
serviceStatus = "Error:\n" + errorWriter.toString();
+ throw de;
} catch (AxisFault axisFault) {
log.error(Messages.getMessage(DeploymentErrorMsgs.INVALID_SERVICE, deploymentFileData
.getName(), axisFault.getMessage()), axisFault);
@@ -319,6 +342,116 @@
}
+ //REST related processing
+ //Get resource definitions for queries
+ //If there are resource definitions
+ Iterator resources = configElement.getChildrenWithName(new QName("resource"));
+
+ if(resources != null && resources.hasNext()){
+ httpLocationTable = new TreeMap(new Comparator() {
+ public int compare(Object o1, Object o2) {
+ return (-1 * ((Comparable) o1).compareTo(o2));
+ }
+ });
+
+ String interfaceName = serviceName + WSDL2Constants.INTERFACE_PREFIX;
+ // Create a default SOAP 1.1 Binding
+ createDefaultSOAP11Binding(serviceName, interfaceName);
+
+ // Create a default SOAP 1.2 Binding
+ createDefaultSOAP12Binding(serviceName, interfaceName);
+
+ // Create a default HTTP Binding
+ createDefaultHTTPBinding(serviceName, interfaceName);
+
+ // We need to get all transports from the axis2 engine and create endpoints for each of
+ // those in here.
+ createDefaultEndpoints(axisService);
+
+ while(resources.hasNext()){
+ OMElement resourceEle = (OMElement) resources.next();
+ //Resource resource = (Resource)resources.get(a);
+ String method = resourceEle.getAttributeValue(new QName("method"));
+ String path = resourceEle.getAttributeValue(new QName("path"));
+
+ //Create an axisoperation to serve resource request
+ String pathWithoutSlashes = path.replaceAll("/", "_");
+ String operationName = "_"+method+pathWithoutSlashes;
+
+ AxisOperation axisOperation = new InOutAxisOperation(new QName(operationName.toLowerCase()));
+
+ axisOperation.setMessageReceiver(dbMessageReceiver);
+ axisOperation.setStyle(WSDLConstants.STYLE_DOC);
+ axisOperation.addParameter(new Parameter(DBConstants.DB_OPERATION_ELEMENT,
+ resourceEle));
+
+ //getting the query element
+ OMElement callQuery = resourceEle.getFirstChildWithName(new QName("call-query"));
+ String hrefVal = callQuery.getAttributeValue(new QName("href"));
+ OMElement query = (OMElement) queryMap.get(hrefVal);
+ CallQuery callQueryElement = new CallQuery();
+ //callQueryElement.populateCallQuery(query,paramsPerCallQueryMap);
+ callQueryElement.populateCallQuery(query,axisService);
+
+ //creating a parameter to hold query object
+ Parameter callQueryParameter = new Parameter();
+ callQueryParameter.setName(DBConstants.CALL_QUERY_ELEMENT);
+ callQueryParameter.setValue(callQueryElement);
+ axisOperation.addParameter(callQueryParameter);
+
+
+ //iterate through with-params in callQuery element & append parameter ids
+ //to resource path
+ Iterator withParamsItr = callQuery.getChildrenWithName(new QName("with-param"));
+ while(withParamsItr.hasNext()){
+ OMElement withParamEle = (OMElement)withParamsItr.next();
+ String name = withParamEle.getAttributeValue(new QName("name"));
+ path +="/{"+name+"}";
+ }
+ //path = path +"/{id}/{name}";
+ log.info("Exposing query :" + hrefVal + " via HTTP "
+ + method + " for URL : " + path);
+
+ // Create a default SOAP 1.1 Binding operation
+ AxisBindingOperation soap11BindingOperation =
+ createDefaultSOAP11BindingOperation(axisOperation, path, method);
+
+ // Create a default SOAP 1.2 Binding operation
+ AxisBindingOperation soap12BindingOperation =
+ createDefaultSOAP12BindingOperation(axisOperation, path, method);
+
+ // Create a default HTTP Binding operation
+ AxisBindingOperation httpBindingOperation =
+ createDefaultHTTPBindingOperation(axisOperation, path, method);
+
+
+ String httpLocationString = RESTUtil
+ .getConstantFromHTTPLocation(path, method);
+ //String httpLocationString = path;
+ httpLocationTable.put(httpLocationString, axisOperation);
+
+ // Create the in and out axis messages for this operation
+ AxisMessage inMessage = axisOperation.getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
+ if (inMessage != null) {
+ inMessage.setName(method + Java2WSDLConstants.MESSAGE_SUFFIX);
+ createAxisBindingMessage(soap11BindingOperation,inMessage);
+ createAxisBindingMessage(soap12BindingOperation,inMessage);
+ createAxisBindingMessage(httpBindingOperation,inMessage);
+ }
+
+ AxisMessage outMessage = axisOperation.getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
+ if (outMessage != null) {
+ outMessage.setName(method + Java2WSDLConstants.RESPONSE_MESSAGE);
+ createAxisBindingMessage(soap11BindingOperation,outMessage);
+ createAxisBindingMessage(soap12BindingOperation,outMessage);
+ createAxisBindingMessage(httpBindingOperation,outMessage);
+ }
+ axisService.addOperation(axisOperation);
+ axisConfig.getPhasesInfo().setOperationPhases(axisOperation);
+ }
+ }
+ //(End) REST related processing
+
Iterator ops = configElement.getChildrenWithName(new QName("operation"));
while (ops.hasNext()) {
OMElement operation = (OMElement) ops.next();
@@ -386,6 +519,184 @@
}
+ private void createAxisBindingMessage(
+ AxisBindingOperation bindingOperation,AxisMessage inMessage) {
+ AxisBindingMessage soap11InBindingMessage = new AxisBindingMessage();
+ soap11InBindingMessage.setName(inMessage.getName());
+ soap11InBindingMessage.setAxisMessage(inMessage);
+ soap11InBindingMessage.setParent(bindingOperation);
+
+ bindingOperation
+ .addChild(WSDLConstants.MESSAGE_LABEL_IN_VALUE, soap11InBindingMessage);
+ }
+
+
+ /**
+ * Creates AxisBindingOperation and populates it with HTTP properties
+ * @param axisOp The AxisOperation corresponding to this bindingOperation
+ * @param httpLocation The httpLocation annotation for this operation
+ * @param httpMethod The httpMethod annotation for this operation
+ * @return AxisBindingOperation having sdefault HTTP values
+ */
+ private AxisBindingOperation createDefaultHTTPBindingOperation(AxisOperation axisOp,
+ String httpLocation,
+ String httpMethod) {
+ AxisBindingOperation httpBindingOperation = new AxisBindingOperation();
+ httpBindingOperation.setAxisOperation(axisOp);
+ httpBindingOperation.setName(axisOp.getName());
+ httpBindingOperation.setParent(httpBinding);
+ httpBindingOperation.setProperty(WSDL2Constants.ATTR_WHTTP_LOCATION, httpLocation);
+ httpBindingOperation.setProperty(WSDL2Constants.ATTR_WHTTP_METHOD, httpMethod);
+ httpBinding.addChild(httpBindingOperation.getName(), httpBindingOperation);
+ return httpBindingOperation;
+ }
+
+ /**
+ * Creates AxisBindingOperation and populates it with SOAP 1.2 properties
+ * @param axisOp The AxisOperation corresponding to this bindingOperation
+ * @param httpLocation The httpLocation annotation for this operation
+ * @param inputAction The input action for this operation
+ * @return AxisBindingOperation having sdefault SOAP 1.2 values
+ */
+ private AxisBindingOperation createDefaultSOAP12BindingOperation(AxisOperation axisOp,
+ String httpLocation,
+ String inputAction) {
+ AxisBindingOperation soap12BindingOperation = new AxisBindingOperation();
+ soap12BindingOperation.setAxisOperation(axisOp);
+ soap12BindingOperation.setName(axisOp.getName());
+ soap12BindingOperation.setParent(soap12Binding);
+ soap12BindingOperation.setProperty(WSDL2Constants.ATTR_WHTTP_LOCATION, httpLocation);
+ soap12Binding.addChild(soap12BindingOperation.getName(), soap12BindingOperation);
+ soap12BindingOperation.setProperty(WSDL2Constants.ATTR_WSOAP_ACTION, inputAction);
+ return soap12BindingOperation;
+ }
+
+ /**
+ * Creates AxisBindingOperation and populates it with SOAP 1.1 properties
+ * @param axisOp The AxisOperation corresponding to this bindingOperation
+ * @param httpLocation The httpLocation annotation for this operation
+ * @param inputAction The input action for this operation
+ * @return AxisBindingOperation having sdefault SOAP 1.1 values
+ */
+ private AxisBindingOperation createDefaultSOAP11BindingOperation(AxisOperation axisOp,
+ String httpLocation,
+ String inputAction) {
+ AxisBindingOperation soap11BindingOperation = new AxisBindingOperation();
+ soap11BindingOperation.setAxisOperation(axisOp);
+ soap11BindingOperation.setName(axisOp.getName());
+ soap11BindingOperation.setParent(soap11Binding);
+ soap11BindingOperation.setProperty(WSDL2Constants.ATTR_WHTTP_LOCATION, httpLocation);
+ soap11Binding.addChild(soap11BindingOperation.getName(), soap11BindingOperation);
+ soap11BindingOperation.setProperty(WSDL2Constants.ATTR_WSOAP_ACTION, inputAction);
+ return soap11BindingOperation;
+ }
+ /**
+ * Creates a AxisBinding and populates it with default SOAP 1.1 properties
+ * @param name The name of the service
+ * @param interfaceName The interface name
+ */
+ private void createDefaultSOAP11Binding(String name, String interfaceName) {
+ soap11Binding = new AxisBinding();
+ soap11Binding.setName(new QName(name + Java2WSDLConstants.BINDING_NAME_SUFFIX));
+ soap11Binding.setType(WSDL2Constants.URI_WSDL2_SOAP);
+ soap11Binding
+ .setProperty(WSDL2Constants.ATTR_WSOAP_PROTOCOL, WSDL2Constants.HTTP_PROTOCAL);
+ soap11Binding.setProperty(WSDL2Constants.ATTR_WSOAP_VERSION,
+ SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
+ soap11Binding.setProperty(WSDL2Constants.INTERFACE_LOCAL_NAME, interfaceName);
+ soap11Binding.setProperty(WSDL2Constants.HTTP_LOCATION_TABLE, httpLocationTable);
+ }
+
+ /**
+ * Creates a AxisBinding and populates it with default HTTP properties
+ * @param name The name of the service
+ * @param interfaceName The interface name
+ */
+ private void createDefaultHTTPBinding(String name, String interfaceName) {
+ httpBinding = new AxisBinding();
+ httpBinding.setName(new QName(name + Java2WSDLConstants.HTTP_BINDING));
+ httpBinding.setType(WSDL2Constants.URI_WSDL2_HTTP);
+ httpBinding.setProperty(WSDL2Constants.INTERFACE_LOCAL_NAME, interfaceName);
+ httpBinding.setProperty(WSDL2Constants.HTTP_LOCATION_TABLE, httpLocationTable);
+ }
+
+ /**
+ * Creates a AxisBinding and populates it with default SOAP 1.2 properties
+ * @param name The name of the service
+ * @param interfaceName The interface name
+ */
+ private void createDefaultSOAP12Binding(String name, String interfaceName) {
+ soap12Binding = new AxisBinding();
+ soap12Binding.setName(new QName(name + Java2WSDLConstants.SOAP12BINDING_NAME_SUFFIX));
+ soap12Binding.setType(WSDL2Constants.URI_WSDL2_SOAP);
+ soap12Binding
+ .setProperty(WSDL2Constants.ATTR_WSOAP_PROTOCOL, WSDL2Constants.HTTP_PROTOCAL);
+ soap12Binding.setProperty(WSDL2Constants.ATTR_WSOAP_VERSION,
+ SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI);
+ soap12Binding.setProperty(WSDL2Constants.INTERFACE_LOCAL_NAME, interfaceName);
+ soap12Binding.setProperty(WSDL2Constants.HTTP_LOCATION_TABLE, httpLocationTable);
+ }
+
+
+ /**
+ * Creates a set of default endpoints for this service
+ * @param axisService The AxisService that the endpoints are created for
+ */
+ private void createDefaultEndpoints(AxisService axisService) {
+ HashMap transportsIn = axisConfig.getTransportsIn();
+ Iterator iterator = transportsIn.values().iterator();
+ while (iterator.hasNext()) {
+ // Used to indicate whether a HTTPEndpoint is needed. Http endpoint is needed only
+ // for http and https transports
+ boolean needHttp = false;
+
+ // The prefix is used to generate endpoint names
+ String prefix = "";
+ TransportInDescription transportIn = (TransportInDescription) iterator.next();
+ String transportInName = transportIn.getName();
+ if (HTTP_TRANSPORT.equalsIgnoreCase(transportInName)) {
+ needHttp = true;
+ } else if (HTTPS_TRANSPORT.equalsIgnoreCase(transportInName)) {
+ needHttp = true;
+ prefix = WSDL2Constants.DEFAULT_HTTPS_PREFIX;
+ } else if (transportInName != null) {
+ prefix = transportInName.toUpperCase();
+ }
+
+ // Creates a default SOAP 1.1 endpoint
+ AxisEndpoint soap11Endpoint = new AxisEndpoint();
+ String soap11EndpointName =
+ prefix + WSDL2Constants.DEFAULT_SOAP11_ENDPOINT_NAME;
+ soap11Endpoint.setName(soap11EndpointName);
+ soap11Endpoint.setBinding(soap11Binding);
+ soap11Endpoint.setParent(axisService);
+ soap11Endpoint.setTransportInDescription(transportInName);
+ axisService.addEndpoint(soap11EndpointName, soap11Endpoint);
+
+ // Creates a default SOAP 1.2 endpoint
+ AxisEndpoint soap12Endpoint = new AxisEndpoint();
+ String soap12EndpointName =
+ prefix + WSDL2Constants.DEFAULT_SOAP12_ENDPOINT_NAME;
+ soap12Endpoint.setName(soap12EndpointName);
+ soap12Endpoint.setBinding(soap12Binding);
+ soap12Endpoint.setParent(axisService);
+ soap12Endpoint.setTransportInDescription(transportInName);
+ axisService.addEndpoint(soap12EndpointName, soap12Endpoint);
+
+ // Creates a HTTP endpoint if its http or https transport is used
+ if (needHttp) {
+ AxisEndpoint httpEndpoint = new AxisEndpoint();
+ String httpEndpointName =
+ prefix + WSDL2Constants.DEFAULT_HTTP_ENDPOINT_NAME;
+ httpEndpoint.setName(httpEndpointName);
+ httpEndpoint.setBinding(httpBinding);
+ httpEndpoint.setParent(axisService);
+ httpEndpoint.setTransportInDescription(transportInName);
+ axisService.addEndpoint(httpEndpointName, httpEndpoint);
+ }
+ }
+ }
+
/*
* map populated here (paramsPerCallQueryMap) will be used to get user
* defined parameter name for web service operation
Modified: trunk/solutions/data-services/java/modules/core/src/main/java/org/wso2/ws/dataservice/DBUtils.java
URL: http://wso2.org/svn/browse/wso2/trunk/solutions/data-services/java/modules/core/src/main/java/org/wso2/ws/dataservice/DBUtils.java?rev=18439&r1=18438&r2=18439&view=diff
==============================================================================
--- trunk/solutions/data-services/java/modules/core/src/main/java/org/wso2/ws/dataservice/DBUtils.java (original)
+++ trunk/solutions/data-services/java/modules/core/src/main/java/org/wso2/ws/dataservice/DBUtils.java Mon Jun 16 04:23:37 2008
@@ -950,7 +950,11 @@
Iterator elements = result.getChildElements();
while (elements.hasNext()) {
OMElement element = (OMElement) elements.next();
- if (element.getLocalName().equals("element")) {
+ //can be one of 'element','attribute','text','link' or 'header'
+ String outPutElementType = element.getLocalName();
+
+ if (outPutElementType.equals("element")
+ || outPutElementType.equals("attribute")) {
String displayTagName = element.getAttributeValue(new QName("name"));
String columnValue = element.getAttributeValue(new QName("column"));
@@ -986,11 +990,11 @@
}
}
- if (columnDefalut == null || columnDefalut.equals("element")) {
+ if (outPutElementType.equals("element")) {
OMElement rowElement = fac.createOMElement(displayTagName, omNs);
rowElement.addChild(fac.createOMText(rowElement, elementValue));
row.addChild(rowElement);
- } else if (columnDefalut.equals("attribute")) {
+ } else if (outPutElementType.equals("attribute")) {
row.addAttribute(displayTagName, elementValue, omNs);
}
}
@@ -1230,7 +1234,11 @@
Iterator elements = result.getChildElements();
while (elements.hasNext()) {
OMElement element = (OMElement) elements.next();
- if (element.getLocalName().equals("element")) {
+
+ //can be one of 'element','attribute','text','link' or 'header'
+ String outPutElementType = element.getLocalName();
+ if (outPutElementType.equals("element")
+ || outPutElementType.equals("attribute")) {
String displayTagName = element.getAttributeValue(new QName("name"));
String columnReference =
element.getAttributeValue(new QName("column"));
@@ -1248,11 +1256,11 @@
//in dbs file column number starts from 1, but inside code it starts from 0
String elementValue = (String) elementValues.get(new Integer(columnRef - 1));
- if (columnDefalut == null || columnDefalut.equals("element")) {
+ if (outPutElementType.equals("element")) {
OMElement rowElement = fac.createOMElement(displayTagName, omNs);
rowElement.addChild(fac.createOMText(rowElement, elementValue));
row.addChild(rowElement);
- } else if (columnDefalut.equals("attribute")) {
+ } else if (outPutElementType.equals("attribute")) {
row.addAttribute(displayTagName, elementValue, omNs);
}
}
More information about the Ds-java-dev
mailing list