Hi All, Please find the attached patch for dss 3.2.2, including Integration tests for JIRA issues [1].
[1] https://wso2.org/jira/browse/CARBON-15261 Thanks, Madhawa -- *Madhawa Gunasekara* Software Engineer WSO2 Inc.; http://wso2.com lean.enterprise.middleware mobile: +94 719411002 <+94+719411002> blog: *http://madhawa-gunasekara.blogspot.com <http://madhawa-gunasekara.blogspot.com>* linkedin: *http://lk.linkedin.com/in/mgunasekara <http://lk.linkedin.com/in/mgunasekara>*
Index: modules/integration/tests-patches/src/test/java/org/wso2/carbon/dss/json/test/CARBON1352JsonFormatterGsonAttributeTest.java =================================================================== --- modules/integration/tests-patches/src/test/java/org/wso2/carbon/dss/json/test/CARBON1352JsonFormatterGsonAttributeTest.java (revision 0) +++ modules/integration/tests-patches/src/test/java/org/wso2/carbon/dss/json/test/CARBON1352JsonFormatterGsonAttributeTest.java (working copy) @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * Licensed 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.wso2.carbon.dss.json.test; + +import org.apache.commons.codec.binary.Base64; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.http.HttpResponse; +import org.testng.Assert; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; +import org.wso2.carbon.automation.api.clients.security.SecurityAdminServiceClient; +import org.wso2.carbon.automation.core.ProductConstant; +import org.wso2.carbon.automation.core.utils.frameworkutils.FrameworkFactory; +import org.wso2.carbon.automation.core.utils.frameworkutils.productvariables.EnvironmentSettings; +import org.wso2.carbon.automation.core.utils.httpserverutils.SimpleHttpClient; +import org.wso2.carbon.automation.core.utils.serverutils.ServerConfigurationManager; +import org.wso2.carbon.dss.DSSIntegrationTest; + +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * This test is to verify the fix for https://wso2.org/jira/browse/DS-1052 + * Retrieving JSON objects with GET request method + * + * Carbon Kernel Patch0011 is required + */ +public class CARBON1352JsonFormatterGsonAttributeTest extends DSSIntegrationTest { + private final String serviceName = "H2JsonSecureServiceTest"; + private String serviceEndPoint; + private SimpleHttpClient client; + private EnvironmentSettings environment; + Map<String, String> headers; + private static final Log log = LogFactory.getLog(CARBON1352JsonFormatterGsonAttributeTest.class); + ServerConfigurationManager serverConfigurationManager; + + @BeforeClass(alwaysRun = true) + public void serviceDeployment() throws Exception { + super.init(0); + serverConfigurationManager = new ServerConfigurationManager(dssServer.getBackEndUrl()); + serverConfigurationManager.applyConfiguration( + new File(ProductConstant.SYSTEM_TEST_RESOURCE_LOCATION + "artifacts" + File.separator + "CARBON1352" + + File.separator + "axis2.xml")); + super.init(0); + List<File> sqlFileLis = new ArrayList<File>(); + sqlFileLis.add(selectSqlFile("Offices.sql")); + serviceEndPoint = getServiceUrlHttps("H2JsonSecureServiceTest") + "/"; + client = new SimpleHttpClient(); + headers = new HashMap<String, String>(); + deployService(serviceName, createArtifact( + ProductConstant.SYSTEM_TEST_RESOURCE_LOCATION + "artifacts" + File.separator + "DSS" + + File.separator + "samples" + File.separator + "dbs" + File.separator + "rdbms" + + File.separator + + "H2JsonSecureServiceTest.dbs", sqlFileLis)); + environment = FrameworkFactory.getFrameworkProperties(ProductConstant.DSS_SERVER_NAME).getEnvironmentSettings(); + } + + @AfterClass(alwaysRun = true) + public void destroy() throws Exception { + deleteService(serviceName); + cleanup(); + serverConfigurationManager.restoreToLastConfiguration(); + serverConfigurationManager.restartGracefully(); + } + + @Test(groups = "wso2.dss", description = "Invoking Request with GET method for unsecured service", + dependsOnMethods = "performJsonGetWithoutSecurityAttributesTest") + public void performJsonGetWithSecurityAttributesTest() throws Exception { + final int policyId = 1; + this.secureService(policyId); + headers.clear(); + headers.put("Accept", "application/json"); + String encode = + (new String((new Base64()).encode((userInfo.getUserName() + ":" + userInfo.getPassword()).getBytes()))) + .replaceAll("\n", ""); + headers.put("Authorization", "Basic " + encode); + HttpResponse response = client.doGet(serviceEndPoint + "nullm", headers); + String responsePayload = client.getResponsePayload(response); + Assert.assertTrue(responsePayload.contains("{\"status\":{\"null\":"), + "Response with attributes test failed for secured service"); + } + + @Test(groups = "wso2.dss", description = "Invoking Request with GET method for secured service") + public void performJsonGetWithoutSecurityAttributesTest() throws Exception { + headers.clear(); + headers.put("Accept", "application/json"); + HttpResponse response = client.doGet(serviceEndPoint + "nullm", headers); + String responsePayload = client.getResponsePayload(response); + Assert.assertTrue(responsePayload.contains("{\"status\":{\"null\":"), + "Response with attributes test failed for unsecured service"); + } + + @Test(groups = "wso2.dss", description = "Invoking Request with GET method for secured service", + dependsOnMethods = "performJsonGetWithoutSecurityAttributesTest") + public void performJsonGetWithSecurityTest() throws Exception { + final int policyId = 1; + this.secureService(policyId); + headers.clear(); + headers.put("Accept", "application/json"); + String encode = + (new String((new Base64()).encode((userInfo.getUserName() + ":" + userInfo.getPassword()).getBytes()))) + .replaceAll("\n", ""); + headers.put("Authorization", "Basic " + encode); + HttpResponse response = client.doGet(serviceEndPoint + "singleSpacem", headers); + String responsePayload = client.getResponsePayload(response); + Assert.assertTrue(responsePayload.contains("{\"status\":{\"null\":"), "Response failed for secured service"); + } + + private void secureService(int policyId) throws Exception { + SecurityAdminServiceClient securityAdminServiceClient = + new SecurityAdminServiceClient(dssServer.getBackEndUrl(), dssServer.getSessionCookie()); + if (environment.is_runningOnStratos()) { + securityAdminServiceClient.applySecurity(serviceName, policyId + "", new String[] { "admin" }, + new String[] { userInfo.getDomain().replace('.', '-') + ".jks" }, + userInfo.getDomain().replace('.', '-') + ".jks"); + } else { + securityAdminServiceClient.applySecurity(serviceName, Integer.toString(policyId), new String[] { "admin" }, + new String[] { "wso2carbon.jks" }, "wso2carbon.jks"); + } + log.info("Security Scenario " + policyId + " Applied"); + Thread.sleep(1000); + } +} Index: modules/integration/tests-patches/src/test/resources/artifacts/CARBON1352/axis2.xml =================================================================== --- modules/integration/tests-patches/src/test/resources/artifacts/CARBON1352/axis2.xml (revision 0) +++ modules/integration/tests-patches/src/test/resources/artifacts/CARBON1352/axis2.xml (working copy) @@ -0,0 +1,714 @@ +<!-- + ~ Copyright 2005-2011 WSO2, Inc. (http://wso2.com) + ~ + ~ Licensed 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. + --> + +<axisconfig name="AxisJava2.0"> + + <!-- ================================================= --> + <!-- Globally engaged modules --> + <!-- ================================================= --> + <module ref="addressing"/> + + <!-- ================================================= --> + <!-- Parameters --> + <!-- ================================================= --> + <parameter name="hotdeployment">true</parameter> + <parameter name="hotupdate">true</parameter> + <parameter name="enableMTOM" locked="false">optional</parameter> + <parameter name="cacheAttachments">true</parameter> + <parameter name="attachmentDIR">work/mtom</parameter> + <parameter name="sizeThreshold">4000</parameter> + + <parameter name="EnableChildFirstClassLoading">${childfirstCL}</parameter> + + <!-- + The exposeServiceMetadata parameter decides whether the metadata (WSDL, schema, policy) of + the services deployed on Axis2 should be visible when ?wsdl, ?wsdl2, ?xsd, ?policy requests + are received. + This parameter can be defined in the axi2.xml file, in which case this will be applicable + globally, or in the services.xml files, in which case, it will be applicable to the + Service groups and/or services, depending on the level at which the parameter is declared. + This value of this parameter defaults to true. + --> + <parameter name="exposeServiceMetadata">true</parameter> + + <!--If turned on with use the Accept header of the request to determine the contentType of the + response--> + <parameter name="httpContentNegotiation">true</parameter> + + <!-- + Defines how the persistence of WS-ReliableMessaging is handled + + Possible value are: inmemory & persistent + --> + <!-- Following parameter will completely disable REST handling in both the servlets--> + <parameter name="disableREST" locked="false">false</parameter> + + <parameter name="Sandesha2StorageManager">inmemory</parameter> + + <!-- This deployment interceptor will be called whenever before a module is initialized or + service is deployed --> + <listener class="org.wso2.carbon.core.deployment.DeploymentInterceptor"/> + + <!-- setting servicePath. contextRoot is defined in the carbon.xml file --> + <!-- modification of this variable should be accompanied by the change in 'ServerURL' in carbon.xml file --> + <parameter name="servicePath">services</parameter> + + <!--the directory in which .aar services are deployed inside axis2 repository--> + <parameter name="ServicesDirectory">axis2services</parameter> + + <!--the directory in which modules are deployed inside axis2 repository--> + <parameter name="ModulesDirectory">axis2modules</parameter> + + <parameter name="userAgent" locked="true"> + WSO2 Data Services Server-3.2.2 + </parameter> + <parameter name="server" locked="true"> + WSO2 Data Services Server-3.2.2 + </parameter> + + <!-- ========================================================================--> + + <!--During a fault, stacktrace can be sent with the fault message. The following flag will control --> + <!--that behaviour.--> + <parameter name="sendStacktraceDetailsWithFaults">false</parameter> + + <!--If there aren't any information available to find out the fault reason, we set the message of the expcetion--> + <!--as the faultreason/Reason. But when a fault is thrown from a service or some where, it will be --> + <!--wrapped by different levels. Due to this the initial exception message can be lost. If this flag--> + <!--is set then, Axis2 tries to get the first exception and set its message as the faultreason/Reason.--> + <parameter name="DrillDownToRootCauseForFaultReason">false</parameter> + + <!--Set the flag to true if you want to enable transport level session mangment--> + <parameter name="manageTransportSession">true</parameter> + + <!-- Synapse Configuration file --> + <parameter name="SynapseConfig.ConfigurationFile" locked="false"> + ./repository/deployment/server/synapse-configs + </parameter> + + <!-- Synapse Home parameter --> + <parameter name="SynapseConfig.HomeDirectory" locked="false">.</parameter> + + <!-- Resolve root used to resolve synapse references like schemas inside a WSDL --> + <parameter name="SynapseConfig.ResolveRoot" locked="false">.</parameter> + + <!-- Synapse Server name parameter --> + <parameter name="SynapseConfig.ServerName" locked="false">WSO2 Carbon Server</parameter> + + <!--By default, JAXWS services are created by reading annotations. WSDL and schema are generated--> + <!--using a separate WSDL generator only when ?wsdl is called. Therefore, even if you engage--> + <!--policies etc.. to AxisService, it doesn't appear in the WSDL. By setting the following property--> + <!--to true, you can create the AxisService using the generated WSDL and remove the need for a--> + <!--WSDL generator. When ?wsdl is called, WSDL is generated in the normal way.--> + <parameter name="useGeneratedWSDLinJAXWS">${jaxwsparam}</parameter> + + <!-- Deployer for the dataservice. --> + <!--<deployer extension="dbs" directory="dataservices" class="org.wso2.dataservices.DBDeployer"/>--> + + <!-- Axis1 deployer for Axis2--> + <!--<deployer extension="wsdd" class="org.wso2.carbon.axis1services.Axis1Deployer" directory="axis1services"/>--> + + <!-- POJO service deployer for Jar --> + <!--<deployer extension="jar" class="org.apache.axis2.deployment.POJODeployer" directory="pojoservices"/>--> + + <!-- POJO service deployer for Class --> + <!--<deployer extension="class" class="org.apache.axis2.deployment.POJODeployer" directory="pojoservices"/>--> + + <!-- JAXWS service deployer --> + <!--<deployer extension=".jar" class="org.apache.axis2.jaxws.framework.JAXWSDeployer" directory="servicejars"/>--> + <!-- ================================================= --> + <!-- Message Receivers --> + <!-- ================================================= --> + <!--This is the Default Message Receiver for the system , if you want to have MessageReceivers for --> + <!--all the other MEP implement it and add the correct entry to here , so that you can refer from--> + <!--any operation --> + <!--Note : You can ovride this for particular service by adding the same element with your requirement--> + + <messageReceivers> + <messageReceiver mep="http://www.w3.org/ns/wsdl/in-only" + class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/> + <messageReceiver mep="http://www.w3.org/ns/wsdl/robust-in-only" + class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/> + <messageReceiver mep="http://www.w3.org/ns/wsdl/in-out" + class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/> + </messageReceivers> + + <messageFormatters> + <messageFormatter contentType="application/x-www-form-urlencoded" + class="org.apache.axis2.transport.http.XFormURLEncodedFormatter"/> + <messageFormatter contentType="multipart/form-data" + class="org.apache.axis2.transport.http.MultipartFormDataFormatter"/> + <messageFormatter contentType="application/xml" + class="org.apache.axis2.transport.http.ApplicationXMLFormatter"/> + <messageFormatter contentType="text/xml" + class="org.apache.axis2.transport.http.SOAPMessageFormatter"/> + <messageFormatter contentType="application/soap+xml" + class="org.apache.axis2.transport.http.SOAPMessageFormatter"/> + + <!--JSON Message Formatters--> + <messageFormatter contentType="application/json" + class="org.apache.axis2.json.JSONMessageFormatter"/> + <!--messageFormatter contentType="application/json" + class="org.apache.axis2.json.gson.JsonFormatter" / --> + <messageFormatter contentType="application/json/badgerfish" + class="org.apache.axis2.json.JSONBadgerfishMessageFormatter"/> + <!--messageFormatter contentType="text/javascript" + class="org.apache.axis2.json.JSONMessageFormatter"/--> + <messageFormatter contentType="text/javascript" + class="org.apache.axis2.json.gson.JsonFormatter" /> + + <!--messageFormatter contentType="application/x-www-form-urlencoded" + class="org.wso2.carbon.relay.ExpandingMessageFormatter"/--> + <!--messageFormatter contentType="multipart/form-data" + class="org.wso2.carbon.relay.ExpandingMessageFormatter"/--> + <!--messageFormatter contentType="application/xml" + class="org.wso2.carbon.relay.ExpandingMessageFormatter"/--> + <!--messageFormatter contentType="text/html" + class="org.wso2.carbon.relay.ExpandingMessageFormatter"/--> + <!--messageFormatter contentType="application/soap+xml" + class="org.wso2.carbon.relay.ExpandingMessageFormatter"/--> + <!--messageFormatter contentType="x-application/hessian" + class="org.apache.synapse.format.hessian.HessianMessageFormatter"/--> + <!--<messageFormatter contentType=""> + class="org.apache.synapse.format.hessian.HessianMessageFormatter"/--> + </messageFormatters> + + <messageBuilders> + <messageBuilder contentType="application/xml" + class="org.apache.axis2.builder.ApplicationXMLBuilder"/> + <messageBuilder contentType="application/x-www-form-urlencoded" + class="org.apache.axis2.builder.XFormURLEncodedBuilder"/> + <messageBuilder contentType="multipart/form-data" + class="org.apache.axis2.builder.MultipartFormDataBuilder"/> + + <!--JSON Message Builders--> + <messageBuilder contentType="application/json" + class="org.apache.axis2.json.JSONOMBuilder" /> + <!--messageBuilder contentType="application/json" + class="org.apache.axis2.json.gson.JsonBuilder" /--> + <messageBuilder contentType="application/json/badgerfish" + class="org.apache.axis2.json.JSONBadgerfishOMBuilder"/> + <!--messageBuilder contentType="text/javascript" + class="org.apache.axis2.json.JSONOMBuilder"/--> + <messageBuilder contentType="text/javascript" + class="org.apache.axis2.json.gson.JsonBuilder" /> + + <!--messageBuilder contentType="application/xml" + class="org.wso2.carbon.relay.BinaryRelayBuilder"/--> + <!--messageBuilder contentType="application/x-www-form-urlencoded" + class="org.wso2.carbon.relay.BinaryRelayBuilder"/--> + <!--messageBuilder contentType="multipart/form-data" + class="org.wso2.carbon.relay.BinaryRelayBuilder"/--> + <!--messageBuilder contentType="multipart/related" + class="org.wso2.carbon.relay.BinaryRelayBuilder"/--> + <!--messageBuilder contentType="application/soap+xml" + class="org.wso2.carbon.relay.BinaryRelayBuilder"/--> + <!--messageBuilder contentType="text/plain" + class="org.wso2.carbon.relay.BinaryRelayBuilder"/--> + <!--messageBuilder contentType="text/xml" + class="org.wso2.carbon.relay.BinaryRelayBuilder"/--> + <!--messageFormatter contentType="text/plain" + class="org.apache.axis2.format.PlainTextBuilder"/--> + <!--messageBuilder contentType="x-application/hessian" + class="org.apache.synapse.format.hessian.HessianMessageBuilder"/--> + </messageBuilders> + + + <!-- ================================================= --> + <!-- In Transports --> + <!-- ================================================= --> + <transportReceiver name="http" + class="org.wso2.carbon.core.transports.http.HttpTransportListener"> + <!-- + Uncomment the following if you are deploying this within an application server. You + need to specify the HTTP port of the application server + --> + <parameter name="port">9763</parameter> + + <!-- + Uncomment the following to enable any proxy like Apache2 mod_proxy or any load balancer. The port on the proxy server like Apache is 80 + in this case. + --> + <!--<parameter name="proxyPort">80</parameter>--> + </transportReceiver> + + <!--Please uncomment this in Multiple Instance Scenario if you want to use NIO Transport Recievers and + Remove the current transport REceivers in axis2.xml --> + <!--transportReceiver name="http" class="org.apache.synapse.transport.nhttp.HttpCoreNIOListener"> + <parameter name="port" locked="false">8280</parameter> + <parameter name="non-blocking" locked="false">true</parameter> + </transportReceiver> + + <transportReceiver name="https" class="org.apache.synapse.transport.nhttp.HttpCoreNIOSSLListener"> + <parameter name="port" locked="false">8243</parameter> + <parameter name="non-blocking" locked="false">true</parameter> + <parameter name="keystore" locked="false"> + <KeyStore> + <Location>repository/resources/security/wso2carbon.jks</Location> + <Type>JKS</Type> + <Password>wso2carbon</Password> + <KeyPassword>wso2carbon</KeyPassword> + </KeyStore> + </parameter> + <parameter name="truststore" locked="false"> + <TrustStore> + <Location>repository/resources/security/client-truststore.jks</Location> + <Type>JKS</Type> + <Password>wso2carbon</Password> + </TrustStore> + </parameter> + </transportReceiver--> + + + <transportReceiver name="https" + class="org.wso2.carbon.core.transports.http.HttpsTransportListener"> + <!-- + Uncomment the following if you are deploying this within an application server. You + need to specify the HTTPS port of the application server + --> + <parameter name="port">9443</parameter> + + <!-- + Uncomment the following to enable any proxy like Apache2 mod_proxy or any load balancer. The port on a proxy server like Apache is 443 + in this case. + --> + <!--<parameter name="proxyPort">443</parameter>--> + </transportReceiver> + + <!-- + Uncomment the following segment to enable TCP transport. + Note : Addressing module should be engaged for TCP transport to work + --> + <!--<transportReceiver name="tcp" + class="org.apache.axis2.transport.tcp.TCPServer"> + <parameter name="port">6667</parameter> + </transportReceiver>--> + + <!-- + To Enable Mail Transport Listener, please uncomment the following. + --> + <!--<transportReceiver name="mailto" class="org.apache.axis2.transport.mail.MailTransportListener"> + + </transportReceiver>--> + + + <!-- + Uncomment this and configure as appropriate for JMS transport support, + after setting up your JMS environment (e.g. ActiveMQ) + --> + <!--<transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener"> + <parameter name="myTopicConnectionFactory"> + <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter> + <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter> + <parameter name="transport.jms.ConnectionFactoryJNDIName">TopicConnectionFactory</parameter> + </parameter> + + <parameter name="myQueueConnectionFactory"> + <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter> + <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter> + <parameter name="transport.jms.ConnectionFactoryJNDIName">QueueConnectionFactory</parameter> + </parameter> + + <parameter name="default"> + <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter> + <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter> + <parameter name="transport.jms.ConnectionFactoryJNDIName">QueueConnectionFactory</parameter> + </parameter> + </transportReceiver>--> + + <!--Uncomment this and configure as appropriate for JMS transport support with Apache Qpid --> + <!--transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener"> + <parameter name="myTopicConnectionFactory" locked="false"> + <parameter name="java.naming.factory.initial" locked="false">org.apache.qpid.jndi.PropertiesFileInitialContextFactory</parameter> + <parameter name="java.naming.provider.url" locked="false">repository/conf/jndi.properties</parameter> + <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">TopicConnectionFactory</parameter> + <parameter name="transport.jms.ConnectionFactoryType" locked="false">topic</parameter> + </parameter> + + <parameter name="myQueueConnectionFactory" locked="false"> + <parameter name="java.naming.factory.initial" locked="false">org.apache.qpid.jndi.PropertiesFileInitialContextFactory</parameter> + <parameter name="java.naming.provider.url" locked="false">repository/conf/jndi.properties</parameter> + <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">QueueConnectionFactory</parameter> + <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter> + </parameter> + + <parameter name="default" locked="false"> + <parameter name="java.naming.factory.initial" locked="false">org.apache.qpid.jndi.PropertiesFileInitialContextFactory</parameter> + <parameter name="java.naming.provider.url" locked="false">repository/conf/jndi.properties</parameter> + <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">QueueConnectionFactory</parameter> + <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter> + </parameter> + </transportReceiver--> + + <!--Uncomment this and configure as appropriate for JMS transport support with WSO2 MB 2.x.x --> + <!--transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener"> + <parameter name="myTopicConnectionFactory" locked="false"> + <parameter name="java.naming.factory.initial" locked="false">org.wso2.andes.jndi.PropertiesFileInitialContextFactory</parameter> + <parameter name="java.naming.provider.url" locked="false">repository/conf/jndi.properties</parameter> + <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">TopicConnectionFactory</parameter> + <parameter name="transport.jms.ConnectionFactoryType" locked="false">topic</parameter> + </parameter> + + <parameter name="myQueueConnectionFactory" locked="false"> + <parameter name="java.naming.factory.initial" locked="false">org.wso2.andes.jndi.PropertiesFileInitialContextFactory</parameter> + <parameter name="java.naming.provider.url" locked="false">repository/conf/jndi.properties</parameter> + <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">QueueConnectionFactory</parameter> + <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter> + </parameter> + + <parameter name="default" locked="false"> + <parameter name="java.naming.factory.initial" locked="false">org.wso2.andes.jndi.PropertiesFileInitialContextFactory</parameter> + <parameter name="java.naming.provider.url" locked="false">repository/conf/jndi.properties</parameter> + <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">QueueConnectionFactory</parameter> + <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter> + </parameter> + </transportReceiver--> + + + <!-- ================================================= --> + <!-- Out Transports --> + <!-- ================================================= --> + + <transportSender name="tcp" + class="org.apache.axis2.transport.tcp.TCPTransportSender"/> + <transportReceiver name="local" + class="org.wso2.carbon.core.transports.local.CarbonLocalTransportReceiver"/> + <transportSender name="local" + class="org.wso2.carbon.core.transports.local.CarbonLocalTransportSender"/> + <!--<transportSender name="jms" + class="org.apache.axis2.transport.jms.JMSSender"/>--> + <transportSender name="http" + class="org.apache.axis2.transport.http.CommonsHTTPTransportSender"> + <parameter name="PROTOCOL">HTTP/1.1</parameter> + <parameter name="Transfer-Encoding">chunked</parameter> + <!-- This parameter has been added to overcome problems encounted in SOAP action parameter --> + <parameter name="OmitSOAP12Action">true</parameter> + </transportSender> + <transportSender name="https" + class="org.apache.axis2.transport.http.CommonsHTTPTransportSender"> + <parameter name="PROTOCOL">HTTP/1.1</parameter> + <parameter name="Transfer-Encoding">chunked</parameter> + <!-- This parameter has been added to overcome problems encounted in SOAP action parameter --> + <parameter name="OmitSOAP12Action">true</parameter> + </transportSender> + + <!-- To enable mail transport sender, ncomment the following and change the parameters + accordingly--> + <!--<transportSender name="mailto" + class="org.apache.axis2.transport.mail.MailTransportSender"> + <parameter name="mail.smtp.from">[email protected]</parameter> + <parameter name="mail.smtp.user">wso2demomail</parameter> + <parameter name="mail.smtp.password">mailpassword</parameter> + <parameter name="mail.smtp.host">smtp.gmail.com</parameter> + + <parameter name="mail.smtp.port">587</parameter> + <parameter name="mail.smtp.starttls.enable">true</parameter> + <parameter name="mail.smtp.auth">true</parameter> + </transportSender>--> + + <!--Please uncomment this in Multiple Instance Scenario if you want to use NIO sender --> + <!-- + <transportSender name="http" class="org.apache.synapse.transport.nhttp.HttpCoreNIOSender"> + <parameter name="non-blocking" locked="false">true</parameter> + </transportSender> + <transportSender name="https" class="org.apache.synapse.transport.nhttp.HttpCoreNIOSSLSender"> + <parameter name="non-blocking" locked="false">true</parameter> + <parameter name="keystore" locked="false"> + <KeyStore> + <Location>repository/resources/security/wso2carbon.jks</Location> + <Type>JKS</Type> + <Password>wso2carbon</Password> + <KeyPassword>wso2carbon</KeyPassword> + </KeyStore> + </parameter> + <parameter name="truststore" locked="false"> + <TrustStore> + <Location>repository/resources/security/client-truststore.jks</Location> + <Type>JKS</Type> + <Password>wso2carbon</Password> + </TrustStore> + </parameter> + </transportSender> + --> + + + <!-- ================================================= --> + <!-- Phases --> + <!-- ================================================= --> + <phaseOrder type="InFlow"> + <!-- System pre defined phases --> + <!-- + The MsgInObservation phase is used to observe messages as soon as they are + received. In this phase, we could do some things such as SOAP message tracing & keeping + track of the time at which a particular message was received + + NOTE: This should be the very first phase in this flow + --> + <phase name="MsgInObservation"/> + + <phase name="Validation"/> + <phase name="Transport"> + <handler name="RequestURIBasedDispatcher" + class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"> + <order phase="Transport"/> + </handler> + <handler name="SOAPActionBasedDispatcher" + class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"> + <order phase="Transport"/> + </handler> + <handler name="RequestURIOperationDispatcher" + class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher" /> + <handler name="JSONMessageHandler" + class="org.apache.axis2.json.gson.JSONMessageHandler" /> + </phase> + <phase name="Addressing"> + <handler name="AddressingBasedDispatcher" + class="org.wso2.carbon.core.multitenancy.MultitenantAddressingBasedDispatcher"> + <order phase="Addressing"/> + </handler> + </phase> + <phase name="Ghost"> + <handler name="GhostDispatcher" + class="org.wso2.carbon.core.dispatchers.GhostDispatcher"/> + </phase> + <phase name="Security"/> + <phase name="PreDispatch"/> + <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase"> + <handler name="RequestURIBasedDispatcher" + class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/> + <handler name="SOAPActionBasedDispatcher" + class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/> + <handler name="SOAPMessageBodyBasedDispatcher" + class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/> + + <handler name="HTTPLocationBasedDispatcher" + class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/> + </phase> + <!-- System pre defined phases --> + <phase name="RMPhase"/> + <phase name="OpPhase"/> + <!-- After Postdispatch phase module author or or service author can add any phase he want --> + <phase name="OperationInPhase"/> + </phaseOrder> + <phaseOrder type="OutFlow"> + <!-- Handlers related to unified-endpoint component are added to the UEPPhase --> + <phase name="UEPPhase"/> + <phase name="RMPhase"/> + <phase name="OpPhase"/> + <!-- user can add his own phases to this area --> + <phase name="OperationOutPhase"/> + <!--system predefined phase--> + <!--these phase will run irrespective of the service--> + <phase name="PolicyDetermination"/> + <phase name="MessageOut"/> + <phase name="Security"/> + + <!-- + The MsgOutObservation phase is used to observe messages just before the + responses are sent out. In this phase, we could do some things such as SOAP message + tracing & keeping track of the time at which a particular response was sent. + + NOTE: This should be the very last phase in this flow + --> + <phase name="MsgOutObservation"/> + <!--Following phase is added to publish stats --> + <phase name="StatReporting"/> + </phaseOrder> + <phaseOrder type="InFaultFlow"> + <!-- System pre defined phases --> + <!-- + The MsgInObservation phase is used to observe messages as soon as they are + received. In this phase, we could do some things such as SOAP message tracing & keeping + track of the time at which a particular message was received + + NOTE: This should be the very first phase in this flow + --> + <phase name="MsgInObservation"/> + + <phase name="Validation"/> + <phase name="Transport"> + <handler name="RequestURIBasedDispatcher" + class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"> + <order phase="Transport"/> + </handler> + <handler name="SOAPActionBasedDispatcher" + class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"> + <order phase="Transport"/> + </handler> + </phase> + + <phase name="Addressing"> + <handler name="AddressingBasedDispatcher" + class="org.apache.axis2.dispatchers.AddressingBasedDispatcher"> + <order phase="Addressing"/> + </handler> + </phase> + <phase name="Ghost"> + <handler name="GhostDispatcher" + class="org.wso2.carbon.core.dispatchers.GhostDispatcher"/> + </phase> + <phase name="Security"/> + <phase name="PreDispatch"/> + <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase"> + <handler name="RequestURIBasedDispatcher" + class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/> + <handler name="SOAPActionBasedDispatcher" + class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/> + <handler name="SOAPMessageBodyBasedDispatcher" + class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/> + + <handler name="HTTPLocationBasedDispatcher" + class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/> + </phase> + <phase name="RMPhase"/> + <phase name="OpPhase"/> + <!-- user can add his own phases to this area --> + <phase name="OperationInFaultPhase"/> + </phaseOrder> + <phaseOrder type="OutFaultFlow"> + <!-- Handlers related to unified-endpoint component are added to the UEPPhase --> + <phase name="UEPPhase"/> + <phase name="RMPhase"/> + <!-- user can add his own phases to this area --> + <phase name="OperationOutFaultPhase"/> + <phase name="PolicyDetermination"/> + <phase name="MessageOut"/> + <phase name="Security"/> + <phase name="Transport"/> + <!-- + The MsgOutObservation phase is used to observe messages just before the + responses are sent out. In this phase, we could do some things such as SOAP message + tracing & keeping track of the time at which a particular response was sent. + + NOTE: This should be the very last phase in this flow + --> + <phase name="MsgOutObservation"/> + <!--Following phase is added to publish stats --> + <phase name="StatReporting"/> + </phaseOrder> + + <clustering class="org.wso2.carbon.core.clustering.hazelcast.HazelcastClusteringAgent" + enable="false"> + + <!-- + This parameter indicates whether the cluster has to be automatically initalized + when the AxisConfiguration is built. If set to "true" the initialization will not be + done at that stage, and some other party will have to explictly initialize the cluster. + --> + <parameter name="AvoidInitiation">true</parameter> + + <!-- + The membership scheme used in this setup. The only values supported at the moment are + "multicast" and "wka" + + 1. multicast - membership is automatically discovered using multicasting + 2. wka - Well-Known Address based multicasting. Membership is discovered with the help + of one or more nodes running at a Well-Known Address. New members joining a + cluster will first connect to a well-known node, register with the well-known node + and get the membership list from it. When new members join, one of the well-known + nodes will notify the others in the group. When a member leaves the cluster or + is deemed to have left the cluster, it will be detected by the Group Membership + Service (GMS) using a TCP ping mechanism. + --> + <parameter name="membershipScheme">multicast</parameter> + <!--<parameter name="licenseKey">xxx</parameter>--> + <!--<parameter name="mgtCenterURL">http://localhost:8081/mancenter/</parameter>--> + + <!-- + The clustering domain/group. Nodes in the same group will belong to the same multicast + domain. There will not be interference between nodes in different groups. + --> + <parameter name="domain">wso2.carbon.domain</parameter> + + <!-- The multicast address to be used --> + <!--<parameter name="mcastAddress">228.0.0.4</parameter>--> + + <!-- The multicast port to be used --> + <parameter name="mcastPort">45564</parameter> + + <parameter name="mcastTTL">100</parameter> + + <parameter name="mcastTimeout">60</parameter> + + <!-- + The IP address of the network interface to which the multicasting has to be bound to. + Multicasting would be done using this interface. + --> + <!-- + <parameter name="mcastBindAddress">127.0.0.1</parameter> + --> + <!-- The host name or IP address of this member --> + + <parameter name="localMemberHost">127.0.0.1</parameter> + + <!-- + The bind adress of this member. The difference between localMemberHost & localMemberBindAddress + is that localMemberHost is the one that is advertised by this member, while localMemberBindAddress + is the address to which this member is bound to. + --> + <!-- + <parameter name="localMemberBindAddress">127.0.0.1</parameter> + --> + + <!-- + The TCP port used by this member. This is the port through which other nodes will + contact this member + --> + <parameter name="localMemberPort">4000</parameter> + + <!-- + The bind port of this member. The difference between localMemberPort & localMemberBindPort + is that localMemberPort is the one that is advertised by this member, while localMemberBindPort + is the port to which this member is bound to. + --> + <!-- + <parameter name="localMemberBindPort">4001</parameter> + --> + + <!-- + Properties specific to this member + --> + <parameter name="properties"> + <property name="backendServerURL" value="https://${hostName}:${httpsPort}/services/"/> + <property name="mgtConsoleURL" value="https://${hostName}:${httpsPort}/"/> + <property name="subDomain" value="worker"/> + </parameter> + + <!-- + The list of static or well-known members. These entries will only be valid if the + "membershipScheme" above is set to "wka" + --> + <members> + <member> + <hostName>127.0.0.1</hostName> + <port>4000</port> + </member> + </members> + + <!-- + Enable the groupManagement entry if you need to run this node as a cluster manager. + Multiple application domains with different GroupManagementAgent implementations + can be defined in this section. + --> + <groupManagement enable="false"> + <applicationDomain name="wso2.as.domain" + description="AS group" + agent="org.wso2.carbon.core.clustering.hazelcast.HazelcastGroupManagementAgent" + subDomain="worker" + port="2222"/> + </groupManagement> + </clustering> +</axisconfig> Index: modules/integration/tests-patches/src/test/resources/artifacts/DSS/samples/dbs/rdbms/H2JsonSecureServiceTest.dbs =================================================================== --- modules/integration/tests-patches/src/test/resources/artifacts/DSS/samples/dbs/rdbms/H2JsonSecureServiceTest.dbs (revision 0) +++ modules/integration/tests-patches/src/test/resources/artifacts/DSS/samples/dbs/rdbms/H2JsonSecureServiceTest.dbs (working copy) @@ -0,0 +1,26 @@ +<data name="H2JsonSecureServiceTest" transports="https local"> + <config id="default"> + <property name="org.wso2.ws.dataservice.driver">org.h2.Driver</property> + <property name="org.wso2.ws.dataservice.protocol">jdbc:h2:file:./samples/database/DATA_SERV_SAMP</property> + <property name="org.wso2.ws.dataservice.user">wso2ds</property> + <property name="org.wso2.ws.dataservice.password">wso2ds</property> + <property name="org.wso2.ws.dataservice.minpoolsize">1</property> + <property name="org.wso2.ws.dataservice.maxpoolsize">10</property> + <property name="org.wso2.ws.dataservice.validation_query"/> + </config> + + <query id="nullQuerym" useConfig="default"> + <sql>SELECT null AS test FROM Offices</sql> + <result outputType="json">{ status: { "null": "$test" }}</result> + </query> + <query id="nullQuery2m" useConfig="default"> + <sql>SELECT IFNULL(null,' ') AS test FROM Offices</sql> + <result outputType="json">{ status: { "null": "$test" }}</result> + </query> + <resource method="GET" path="nullm"> + <call-query href="nullQuerym"/> + </resource> + <resource method="GET" path="singleSpacem"> + <call-query href="nullQuery2m"/> + </resource> +</data> \ No newline at end of file Index: modules/integration/tests-patches/src/test/resources/testng.xml =================================================================== --- modules/integration/tests-patches/src/test/resources/testng.xml (revision 32600) +++ modules/integration/tests-patches/src/test/resources/testng.xml (working copy) @@ -18,6 +18,7 @@ <!--Carbon Kernel Patch0011 is required--> <!-- <test name="Json-Formatter-Test" preserve-order="true" verbose="2" parallel="false"> <classes> + <class name="org.wso2.carbon.dss.json.test.CARBON1352JsonFormatterGsonAttributeTest"/> <class name="org.wso2.carbon.dss.json.test.CARBON1336JsonFormatterGsonSuperTenantmodeTest"/> <class name="org.wso2.carbon.dss.json.test.CARBON1336JsonFormatterGsonTenantmodeTest"/> </classes>
_______________________________________________ Dev mailing list [email protected] http://wso2.org/cgi-bin/mailman/listinfo/dev
