Author: hiranya
Date: Sun Jul 14 20:43:58 2013
New Revision: 1503049
URL: http://svn.apache.org/r1503049
Log:
Committing the patch for SYNAPSE-936. Updated the axis2.xml configs and sample
800 config. Thanks Dushan for the contribution.
Added:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/api/
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/api/PassThroughNHttpGetProcessor.java
Modified:
synapse/trunk/java/modules/integration/src/test/resources/axis2Xml/synapse/axis2_def.xml
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/DefaultHttpGetProcessor.java
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/ProtocolState.java
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/ServerWorker.java
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/SourceHandler.java
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/config/SourceConfiguration.java
synapse/trunk/java/repository/conf/axis2.xml
synapse/trunk/java/repository/conf/sample/synapse_sample_800.xml
Modified:
synapse/trunk/java/modules/integration/src/test/resources/axis2Xml/synapse/axis2_def.xml
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/integration/src/test/resources/axis2Xml/synapse/axis2_def.xml?rev=1503049&r1=1503048&r2=1503049&view=diff
==============================================================================
---
synapse/trunk/java/modules/integration/src/test/resources/axis2Xml/synapse/axis2_def.xml
(original)
+++
synapse/trunk/java/modules/integration/src/test/resources/axis2Xml/synapse/axis2_def.xml
Sun Jul 14 20:43:58 2013
@@ -192,6 +192,7 @@
<transportReceiver name="http"
class="org.apache.synapse.transport.passthru.PassThroughHttpListener">
<parameter name="port">8280</parameter>
<parameter name="non-blocking">true</parameter>
+ <parameter name="httpGetProcessor"
locked="false">org.apache.synapse.transport.passthru.api.PassThroughNHttpGetProcessor</parameter>
<!--parameter name="bind-address" locked="false">hostname or IP
address</parameter-->
<!--parameter name="WSDLEPRPrefix"
locked="false">https://apachehost:port/somepath</parameter-->
</transportReceiver>
@@ -199,6 +200,7 @@
<transportReceiver name="https"
class="org.apache.synapse.transport.passthru.PassThroughHttpSSLListener">
<parameter name="port" locked="false">8243</parameter>
<parameter name="non-blocking" locked="false">true</parameter>
+ <parameter name="httpGetProcessor"
locked="false">org.apache.synapse.transport.passthru.api.PassThroughNHttpGetProcessor</parameter>
<parameter name="keystore" locked="false">
<KeyStore>
<Location>modules/integration/src/test/resources/identity.jks</Location>
Modified:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/DefaultHttpGetProcessor.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/DefaultHttpGetProcessor.java?rev=1503049&r1=1503048&r2=1503049&view=diff
==============================================================================
---
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/DefaultHttpGetProcessor.java
(original)
+++
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/DefaultHttpGetProcessor.java
Sun Jul 14 20:43:58 2013
@@ -118,12 +118,6 @@ public class DefaultHttpGetProcessor imp
response.setStatusCode(HttpStatus.SC_MOVED_PERMANENTLY);
response.addHeader(LOCATION, "http://ws.apache.org/favicon.ico");
serverHandler.commitResponseHideExceptions(conn, response);
-
-// } else if (!uri.startsWith(servicePath)) {
-// response.setStatusCode(HttpStatus.SC_MOVED_PERMANENTLY);
-// response.addHeader(LOCATION, servicePath + "/");
-// serverHandler.commitResponseHideExceptions(conn, response);
-
} else if (serviceName != null && parameters.containsKey("wsdl")) {
generateWsdl(request, response, msgContext,
conn, os, serviceName, parameters, isRestDispatching);
Modified:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/ProtocolState.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/ProtocolState.java?rev=1503049&r1=1503048&r2=1503049&view=diff
==============================================================================
---
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/ProtocolState.java
(original)
+++
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/ProtocolState.java
Sun Jul 14 20:43:58 2013
@@ -44,5 +44,5 @@ public enum ProtocolState {
/** The connection is closed */
CLOSED,
/** WSDL response has been sent */
- WSDL_RESPONSE_DONE
+ WSDL_XSD_RESPONSE_DONE
}
Modified:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/ServerWorker.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/ServerWorker.java?rev=1503049&r1=1503048&r2=1503049&view=diff
==============================================================================
---
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/ServerWorker.java
(original)
+++
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/ServerWorker.java
Sun Jul 14 20:43:58 2013
@@ -200,7 +200,7 @@ public class ServerWorker implements Run
SourceContext info = (SourceContext)
request.getConnection().getContext().
getAttribute(SourceContext.CONNECTION_INFORMATION);
if (info != null &&
- info.getState().equals(ProtocolState.WSDL_RESPONSE_DONE) ||
+
info.getState().equals(ProtocolState.WSDL_XSD_RESPONSE_DONE) ||
(msgContext.getProperty(PassThroughConstants.WSDL_GEN_HANDLED) != null &&
Boolean.TRUE.equals((msgContext.getProperty(PassThroughConstants.WSDL_GEN_HANDLED)))))
{
return;
Modified:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/SourceHandler.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/SourceHandler.java?rev=1503049&r1=1503048&r2=1503049&view=diff
==============================================================================
---
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/SourceHandler.java
(original)
+++
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/SourceHandler.java
Sun Jul 14 20:43:58 2013
@@ -83,7 +83,7 @@ public class SourceHandler implements NH
System.currentTimeMillis());
if (!SourceContext.assertState(conn, ProtocolState.REQUEST_READY)
&&
- !SourceContext.assertState(conn,
ProtocolState.WSDL_RESPONSE_DONE)) {
+ !SourceContext.assertState(conn,
ProtocolState.WSDL_XSD_RESPONSE_DONE)) {
handleInvalidState(conn, "Request received");
return;
}
@@ -192,7 +192,7 @@ public class SourceHandler implements NH
ProtocolState protocolState = SourceContext.getState(conn);
//special case to handle WSDLs
- if(protocolState == ProtocolState.WSDL_RESPONSE_DONE){
+ if(protocolState == ProtocolState.WSDL_XSD_RESPONSE_DONE){
// we need to shut down if the shutdown flag is set
HttpContext context = conn.getContext();
ContentOutputBuffer outBuf = (ContentOutputBuffer)
context.getAttribute(
@@ -433,5 +433,26 @@ public class SourceHandler implements NH
}
log.error(errorMessage, e);
}
+
+
+ /**
+ * Commit the response to the connection. Processes the response through
the configured
+ * HttpProcessor and submits it to be sent out. This method hides any
exceptions and is targetted
+ * for non critical (i.e. browser requests etc) requests, which are not
core messages
+ * @param conn the connection being processed
+ * @param response the response to commit over the connection
+ */
+ public void commitResponseHideExceptions(
+ final NHttpServerConnection conn, final HttpResponse response) {
+ try {
+ conn.suspendInput();
+ sourceConfiguration.getHttpProcessor().process(response,
conn.getContext());
+ conn.submitResponse(response);
+ } catch (HttpException e) {
+ handleException("Unexpected HTTP protocol error : " +
e.getMessage(), e, conn);
+ } catch (IOException e) {
+ handleException("IO error submiting response : " + e.getMessage(),
e, conn);
+ }
+ }
}
Added:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/api/PassThroughNHttpGetProcessor.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/api/PassThroughNHttpGetProcessor.java?rev=1503049&view=auto
==============================================================================
---
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/api/PassThroughNHttpGetProcessor.java
(added)
+++
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/api/PassThroughNHttpGetProcessor.java
Sun Jul 14 20:43:58 2013
@@ -0,0 +1,470 @@
+/*
+ * 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.synapse.transport.passthru.api;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.InetAddress;
+import java.net.NetworkInterface;
+import java.net.SocketException;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+import org.apache.axis2.AxisFault;
+import org.apache.axis2.addressing.EndpointReference;
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.description.AxisService;
+import org.apache.axis2.wsdl.WSDLConstants;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.http.HttpRequest;
+import org.apache.http.HttpResponse;
+import org.apache.http.HttpStatus;
+import org.apache.http.nio.NHttpServerConnection;
+import org.apache.http.protocol.HTTP;
+import org.apache.synapse.transport.nhttp.NHttpConfiguration;
+import org.apache.synapse.transport.nhttp.NhttpConstants;
+import org.apache.synapse.transport.passthru.HttpGetRequestProcessor;
+import org.apache.synapse.transport.passthru.PassThroughConstants;
+import org.apache.synapse.transport.passthru.ProtocolState;
+import org.apache.synapse.transport.passthru.SourceContext;
+import org.apache.synapse.transport.passthru.SourceHandler;
+import org.apache.ws.commons.schema.XmlSchema;
+
+public class PassThroughNHttpGetProcessor implements HttpGetRequestProcessor {
+
+ private static final Log log =
LogFactory.getLog(PassThroughNHttpGetProcessor.class);
+
+
+ private static final String LOCATION = "Location";
+ private static final String CONTENT_TYPE = "Content-Type";
+ private static final String TEXT_HTML = "text/html";
+ private static final String TEXT_XML = "text/xml";
+
+ protected ConfigurationContext cfgCtx;
+
+ protected SourceHandler sourceHandler;
+
+ public void init(ConfigurationContext cfgCtx, SourceHandler handler)
+ throws AxisFault {
+
+ this.cfgCtx = cfgCtx;
+ this.sourceHandler = handler;
+ }
+
+ public void process(HttpRequest request, HttpResponse response,
+ MessageContext msgContext, NHttpServerConnection conn,
+ OutputStream os, boolean isRestDispatching) {
+
+ String uri = request.getRequestLine().getUri();
+ String serviceName = getServiceName(request);
+
+ Map<String, String> parameters = new HashMap<String, String>();
+ int pos = uri.indexOf("?");
+ if (pos != -1) {
+ msgContext.setTo(new EndpointReference(uri.substring(0,
pos)));
+ StringTokenizer st = new
StringTokenizer(uri.substring(pos + 1),
+ "&");
+ while (st.hasMoreTokens()) {
+ String param = st.nextToken();
+ pos = param.indexOf("=");
+ if (pos != -1) {
+ parameters.put(param.substring(0, pos),
+ param.substring(pos +
1));
+ } else {
+ parameters.put(param, null);
+ }
+ }
+ } else {
+ msgContext.setTo(new EndpointReference(uri));
+ }
+
+ if (isServiceListBlocked(uri)) {
+ response.setStatusCode(HttpStatus.SC_FORBIDDEN);
+ sourceHandler.commitResponseHideExceptions(conn,
response);
+ closeOutputStream(os);
+ } else if (uri.equals("/favicon.ico")) {
+ response.setStatusCode(HttpStatus.SC_MOVED_PERMANENTLY);
+ response.addHeader(LOCATION,
"http://ws.apache.org/favicon.ico");
+ sourceHandler.commitResponseHideExceptions(conn,
response);
+ closeOutputStream(os);
+ } else if (serviceName != null &&
parameters.containsKey("wsdl")) {
+ generateWsdl(response, msgContext, conn, os,
serviceName, parameters);
+ } else if (serviceName != null &&
parameters.containsKey("wsdl2")) {
+ generateWsdl2(response, msgContext, conn, os,
serviceName);
+ } else if (serviceName != null &&
parameters.containsKey("xsd")) {
+ generateXsd(response, msgContext, conn, os,
serviceName, parameters);
+ } else {
+
msgContext.setProperty(PassThroughConstants.REST_GET_DELETE_INVOKE, true);
+ }
+ }
+
+ private void closeOutputStream(OutputStream os) {
+ try {
+ os.flush();
+ os.close();
+ } catch (IOException ignore) {
+ }
+ }
+
+ /**
+ * Generate WSDL.
+ *
+ * @param response
+ * HttpResponse
+ * @param msgContext
+ * MessageContext
+ * @param conn
+ * NHttpServerConnection
+ * @param os
+ * OutputStream
+ * @param serviceName
+ * service name
+ * @param parameters
+ * parameters
+ */
+ protected void generateWsdl(HttpResponse response,
+ MessageContext msgContext, NHttpServerConnection conn,
+ OutputStream os, String serviceName,
+ Map<String, String> parameters) {
+ AxisService service =
cfgCtx.getAxisConfiguration().getServices()
+ .get(serviceName);
+ if (service != null) {
+ try {
+ ByteArrayOutputStream baos = new
ByteArrayOutputStream();
+ String parameterValue = parameters.get("wsdl");
+ if (parameterValue == null) {
+ service.printWSDL(baos, getIpAddress());
+ } else {
+ // here the parameter value should be
the wsdl file name
+ service.printUserWSDL(baos,
parameterValue);
+ }
+ SourceContext.updateState(conn,
ProtocolState.WSDL_XSD_RESPONSE_DONE);
+ response.addHeader(CONTENT_TYPE, TEXT_XML);
+
sourceHandler.commitResponseHideExceptions(conn, response);
+ os.write(baos.toByteArray());
+ closeOutputStream(os);
+
+ } catch (Exception e) {
+ handleBrowserException(response, conn, os,
+ "Error generating ?wsdl output
for service : "
+ + serviceName,
e);
+ }
+ } else {
+
msgContext.setProperty(PassThroughConstants.REST_GET_DELETE_INVOKE, true);
+ }
+ }
+
+ /**
+ * Generate WSDL2.
+ *
+ * @param response
+ * HttpResponse
+ * @param msgContext
+ * MessageContext
+ * @param conn
+ * NHttpServerConnection
+ * @param os
+ * OutputStream
+ * @param serviceName
+ * service name
+ */
+ protected void generateWsdl2(HttpResponse response,
+ MessageContext msgContext, NHttpServerConnection conn,
+ OutputStream os, String serviceName) {
+ AxisService service =
cfgCtx.getAxisConfiguration().getServices()
+ .get(serviceName);
+ if (service != null) {
+ String parameterValue = (String) service
+ .getParameterValue("serviceType");
+ if ("proxy".equals(parameterValue)
+ &&
!isWSDLProvidedForProxyService(service)) {
+ handleBrowserException(response, conn, os,
+ "No WSDL was provided for the
Service " + serviceName
+ + ". A WSDL
cannot be generated.", null);
+ }
+ try {
+ ByteArrayOutputStream baos = new
ByteArrayOutputStream();
+ service.printWSDL2(baos, getIpAddress());
+ response.addHeader(CONTENT_TYPE, TEXT_XML);
+ SourceContext.updateState(conn,
ProtocolState.WSDL_XSD_RESPONSE_DONE);
+
sourceHandler.commitResponseHideExceptions(conn, response);
+ os.write(baos.toByteArray());
+ closeOutputStream(os);
+
+ } catch (Exception e) {
+ handleBrowserException(response, conn, os,
+ "Error generating ?wsdl2 output
for service : "
+ + serviceName,
e);
+ }
+ } else {
+
msgContext.setProperty(PassThroughConstants.REST_GET_DELETE_INVOKE, true);
+ }
+ }
+
+ /**
+ * Returns the service name.
+ *
+ * @param request
+ * HttpRequest
+ * @return service name as a String
+ */
+ protected String getServiceName(HttpRequest request) {
+ String uri = request.getRequestLine().getUri();
+
+ String servicePath = cfgCtx.getServiceContextPath();
+ if (!servicePath.startsWith("/")) {
+ servicePath = "/" + servicePath;
+ }
+
+ String serviceName = null;
+ if (uri.startsWith(servicePath)) {
+ serviceName = uri.substring(servicePath.length());
+ if (serviceName.startsWith("/")) {
+ serviceName = serviceName.substring(1);
+ }
+ if (serviceName.contains("?")) {
+ serviceName = serviceName
+ .substring(0,
serviceName.indexOf("?"));
+ }
+ } else {
+ // this may be a custom URI
+ String incomingURI = request.getRequestLine().getUri();
+
+ Map serviceURIMap = (Map) cfgCtx
+
.getProperty(NhttpConstants.EPR_TO_SERVICE_NAME_MAP);
+ if (serviceURIMap != null) {
+ Set keySet = serviceURIMap.keySet();
+ for (Object key : keySet) {
+ if (incomingURI.toLowerCase().contains(
+ ((String)
key).toLowerCase())) {
+ return (String)
serviceURIMap.get(key);
+ }
+ }
+ }
+ }
+
+ if (serviceName != null) {
+ int opnStart = serviceName.indexOf("/");
+ if (opnStart != -1) {
+ serviceName = serviceName.substring(0,
opnStart);
+ }
+ }
+ return serviceName;
+ }
+
+ /**
+ * Generates Schema.
+ *
+ * @param response
+ * HttpResponse
+ * @param messageCtx
+ * Current MessageContext
+ * @param conn
+ * NHttpServerConnection
+ * @param os
+ * OutputStream
+ * @param serviceName
+ * service name
+ * @param parameters
+ * url parameters
+ */
+ protected void generateXsd(HttpResponse response,
+ MessageContext messageCtx, NHttpServerConnection conn,
+ OutputStream os, String serviceName,
+ Map<String, String> parameters) {
+ if (parameters.get("xsd") == null ||
"".equals(parameters.get("xsd"))) {
+ AxisService service =
cfgCtx.getAxisConfiguration().getServices()
+ .get(serviceName);
+ if (service != null) {
+ try {
+ ByteArrayOutputStream baos = new
ByteArrayOutputStream();
+ service.printSchema(baos);
+ response.addHeader(CONTENT_TYPE,
TEXT_XML);
+ SourceContext.updateState(conn,
ProtocolState.WSDL_XSD_RESPONSE_DONE);
+
sourceHandler.commitResponseHideExceptions(conn, response);
+ os.write(baos.toByteArray());
+ closeOutputStream(os);
+
+ } catch (Exception e) {
+ handleBrowserException(response, conn,
os,
+ "Error generating ?xsd
output for service : "
+ +
serviceName, e);
+ }
+ } else {
+
messageCtx.setProperty(PassThroughConstants.REST_GET_DELETE_INVOKE,
+ true);
+ }
+
+ } else {
+ // cater for named XSDs - check for the xsd name
+ String schemaName = parameters.get("xsd");
+ AxisService service =
cfgCtx.getAxisConfiguration().getServices()
+ .get(serviceName);
+
+ if (service != null) {
+ // run the population logic just to be sure
+ service.populateSchemaMappings();
+ // write out the correct schema
+ Map schemaTable =
service.getSchemaMappingTable();
+ XmlSchema schema = (XmlSchema)
schemaTable.get(schemaName);
+ if (schema == null) {
+ int dotIndex = schemaName.indexOf('.');
+ if (dotIndex > 0) {
+ String schemaKey =
schemaName.substring(0, dotIndex);
+ schema = (XmlSchema)
schemaTable.get(schemaKey);
+ }
+ }
+ // schema found - write it to the stream
+ if (schema != null) {
+ try {
+ ByteArrayOutputStream baos =
new ByteArrayOutputStream();
+ schema.write(baos);
+
response.addHeader(CONTENT_TYPE, TEXT_XML);
+
sourceHandler.commitResponseHideExceptions(conn,
+ response);
+ os.write(baos.toByteArray());
+ closeOutputStream(os);
+ } catch (Exception e) {
+
handleBrowserException(response, conn, os,
+ "Error
generating named ?xsd output for service : "
+
+ serviceName, e);
+ }
+
+ } else {
+ // no schema available by that name -
send 404
+
response.setStatusCode(HttpStatus.SC_NOT_FOUND);
+ closeOutputStream(os);
+ }
+ } else {
+
messageCtx.setProperty(PassThroughConstants.REST_GET_DELETE_INVOKE,
+ true);
+ }
+ }
+ }
+
+
+ /**
+ * Handles browser exception.
+ *
+ * @param response HttpResponse
+ * @param conn NHttpServerConnection
+ * @param os OutputStream
+ * @param msg message
+ * @param e Exception
+ */
+ protected void handleBrowserException(HttpResponse response,
+ NHttpServerConnection conn,
OutputStream os,
+ String msg, Exception e) {
+ if (e == null) {
+ log.error(msg);
+ } else {
+ log.error(msg, e);
+ }
+
+ if (!response.containsHeader(HTTP.TRANSFER_ENCODING)) {
+ response.setStatusCode(HttpStatus.SC_INTERNAL_SERVER_ERROR);
+ response.setReasonPhrase(msg);
+ response.addHeader(CONTENT_TYPE, TEXT_HTML);
+ sourceHandler.commitResponseHideExceptions(conn, response);
+ try {
+ os.write(msg.getBytes());
+ os.close();
+ } catch (IOException ignore) {
+ }
+ }
+
+ if (conn != null) {
+ try {
+ conn.shutdown();
+ } catch (IOException ignore) {
+ }
+ }
+ }
+
+
+ /**
+ * Is the incoming URI is requesting service list and
+ * http.block_service_list=true in nhttp.properties
+ *
+ * @param incomingURI
+ * incoming URI
+ * @return whether to proceed with incomingURI
+ */
+ protected boolean isServiceListBlocked(String incomingURI) {
+ String isBlocked = NHttpConfiguration.getInstance()
+ .isServiceListBlocked();
+
+ return (("/services").equals(incomingURI) || ("/services" + "/")
+ .equals(incomingURI)) &&
Boolean.parseBoolean(isBlocked);
+ }
+
+
+ /**
+ * Checks whether a wsdl is provided for a proxy service.
+ *
+ * @param service AxisService
+ * @return whether the wsdl is provided or not
+ */
+ protected boolean isWSDLProvidedForProxyService(AxisService service) {
+ boolean isWSDLProvided = false;
+ if (service.getParameterValue(WSDLConstants.WSDL_4_J_DEFINITION) !=
null ||
+ service.getParameterValue(WSDLConstants.WSDL_20_DESCRIPTION)
!= null) {
+ isWSDLProvided = true;
+ }
+ return isWSDLProvided;
+ }
+
+
+ /**
+ * Whatever this method returns as the IP is ignored by the actual http/s
listener when
+ * its getServiceEPR is invoked. This was originally copied from axis2
+ *
+ * @return Returns String.
+ * @throws java.net.SocketException if the socket can not be accessed
+ */
+ protected static String getIpAddress() throws SocketException {
+ Enumeration e = NetworkInterface.getNetworkInterfaces();
+ String address = "127.0.0.1";
+
+ while (e.hasMoreElements()) {
+ NetworkInterface netface = (NetworkInterface) e.nextElement();
+ Enumeration addresses = netface.getInetAddresses();
+
+ while (addresses.hasMoreElements()) {
+ InetAddress ip = (InetAddress) addresses.nextElement();
+ if (!ip.isLoopbackAddress() && isIP(ip.getHostAddress())) {
+ return ip.getHostAddress();
+ }
+ }
+ }
+ return address;
+ }
+
+ protected static boolean isIP(String hostAddress) {
+ return hostAddress.split("[.]").length == 4;
+ }
+
+}
Modified:
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/config/SourceConfiguration.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/config/SourceConfiguration.java?rev=1503049&r1=1503048&r2=1503049&view=diff
==============================================================================
---
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/config/SourceConfiguration.java
(original)
+++
synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/config/SourceConfiguration.java
Sun Jul 14 20:43:58 2013
@@ -33,7 +33,6 @@ import org.apache.http.impl.DefaultHttpR
import org.apache.axis2.transport.base.threads.WorkerPool;
import org.apache.axis2.transport.base.ParamUtils;
import org.apache.axis2.AxisFault;
-import org.apache.synapse.transport.nhttp.DefaultHttpGetProcessor;
import org.apache.synapse.transport.nhttp.NhttpConstants;
import org.apache.synapse.transport.passthru.HttpGetRequestProcessor;
Modified: synapse/trunk/java/repository/conf/axis2.xml
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/repository/conf/axis2.xml?rev=1503049&r1=1503048&r2=1503049&view=diff
==============================================================================
--- synapse/trunk/java/repository/conf/axis2.xml (original)
+++ synapse/trunk/java/repository/conf/axis2.xml Sun Jul 14 20:43:58 2013
@@ -189,6 +189,7 @@
<transportReceiver name="http"
class="org.apache.synapse.transport.passthru.PassThroughHttpListener">
<parameter name="port">8280</parameter>
<parameter name="non-blocking">true</parameter>
+ <parameter name="httpGetProcessor"
locked="false">org.apache.synapse.transport.passthru.api.PassThroughNHttpGetProcessor</parameter>
<!--parameter name="bind-address" locked="false">hostname or IP
address</parameter-->
<!--parameter name="WSDLEPRPrefix"
locked="false">https://apachehost:port/somepath</parameter-->
<!-- paramter name="priorityConfigFile" locked="false">location of
priority configuration file<parameter-->
@@ -197,9 +198,11 @@
<!-- the non blocking https transport based on HttpCore + SSL-NIO
extensions -->
<transportReceiver name="https"
class="org.apache.synapse.transport.passthru.PassThroughHttpSSLListener">
<parameter name="port" locked="false">8243</parameter>
+ <parameter name="non-blocking" locked="false">true</parameter>
+ <parameter name="httpGetProcessor"
locked="false">org.apache.synapse.transport.passthru.api.PassThroughNHttpGetProcessor</parameter>
<!--parameter name="bind-address" locked="false">hostname or IP
address</parameter-->
<!--parameter name="WSDLEPRPrefix"
locked="false">http://apachehost:port/somepath</parameter-->
- <parameter name="non-blocking" locked="false">true</parameter>
+
<parameter name="keystore" locked="false">
<KeyStore>
<Location>lib/identity.jks</Location>
@@ -585,4 +588,4 @@
<phase name="MessageOut"/>
<phase name="Security"/>
</phaseOrder>
-</axisconfig>
\ No newline at end of file
+</axisconfig>
Modified: synapse/trunk/java/repository/conf/sample/synapse_sample_800.xml
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/repository/conf/sample/synapse_sample_800.xml?rev=1503049&r1=1503048&r2=1503049&view=diff
==============================================================================
--- synapse/trunk/java/repository/conf/sample/synapse_sample_800.xml (original)
+++ synapse/trunk/java/repository/conf/sample/synapse_sample_800.xml Sun Jul 14
20:43:58 2013
@@ -14,6 +14,7 @@
<arg expression="get-property('uri.var.symbol')"/>
</args>
</payloadFactory>
+ <header name="Action" value="urn:getQuote"/>
<send>
<endpoint>
<address
uri="http://localhost:9000/services/SimpleStockQuoteService" format="soap11"/>
@@ -28,6 +29,7 @@
<inSequence>
<property name="FORCE_SC_ACCEPTED" value="true" scope="axis2"/>
<property name="OUT_ONLY" value="true"/>
+ <header name="Action" value="urn:placeOrder"/>
<send>
<endpoint>
<address
uri="http://localhost:9000/services/SimpleStockQuoteService" format="soap11"/>