Java tutorial
/* * Copyright (c) 2005-2010, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * * WSO2 Inc. 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.message.custom.processor.impl; import org.apache.axis2.AxisFault; import org.apache.axis2.client.OperationClient; import org.apache.axis2.client.Options; import org.apache.axis2.context.ConfigurationContext; import org.apache.axis2.context.ConfigurationContextFactory; import org.apache.axis2.context.ServiceContext; import org.apache.axis2.description.AxisOperation; 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.synapse.MessageContext; import org.apache.synapse.SynapseConstants; import org.apache.synapse.SynapseException; import org.apache.synapse.commons.json.JsonUtil; import org.apache.synapse.core.axis2.AnonymousServiceFactory; import org.apache.synapse.core.axis2.Axis2MessageContext; import org.apache.synapse.endpoints.AbstractEndpoint; import org.apache.synapse.endpoints.Endpoint; import org.apache.synapse.endpoints.EndpointDefinition; import org.apache.synapse.message.senders.blocking.BlockingMsgSenderUtils; import org.apache.synapse.util.MessageHelper; import javax.xml.namespace.QName; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStreamReader; import java.net.Socket; public class BlockingTCPMsgSender { public final static String DEFAULT_CLIENT_REPO = "./repository/deployment/client"; public final static String DEFAULT_AXIS2_XML = "./repository/conf/axis2/axis2_blocking_client.xml"; private static Log log = LogFactory.getLog(BlockingTCPMsgSender.class); private String clientRepository = null; private String axis2xml = null; private ConfigurationContext configurationContext = null; boolean initClientOptions = true; public void init() { try { if (configurationContext == null) { configurationContext = ConfigurationContextFactory.createConfigurationContextFromFileSystem( clientRepository != null ? clientRepository : DEFAULT_CLIENT_REPO, axis2xml != null ? axis2xml : DEFAULT_AXIS2_XML); } } catch (AxisFault e) { handleException("Error initializing TCPBlockingMessageSender", e); } } public String send(Endpoint endpoint, MessageContext synapseInMsgCtx) throws Exception { if (log.isDebugEnabled()) { log.debug("Start Sending the Message "); } AbstractEndpoint abstractEndpoint = (AbstractEndpoint) endpoint; if (!abstractEndpoint.isLeafEndpoint()) { handleException("Endpoint Type not supported"); } abstractEndpoint.executeEpTypeSpecificFunctions(synapseInMsgCtx); EndpointDefinition endpointDefinition = abstractEndpoint.getDefinition(); org.apache.axis2.context.MessageContext axisInMsgCtx = ((Axis2MessageContext) synapseInMsgCtx) .getAxis2MessageContext(); String endpointReferenceValue = null; if (endpointDefinition.getAddress() != null) { endpointReferenceValue = endpointDefinition.getAddress(); } else if (axisInMsgCtx.getTo() != null) { endpointReferenceValue = axisInMsgCtx.getTo().getAddress(); } else { handleException("Service url, Endpoint or 'To' header is required"); } Options clientOptions; if (initClientOptions) { clientOptions = new Options(); } else { clientOptions = axisInMsgCtx.getOptions(); } // Fill Client options BlockingMsgSenderUtils.fillClientOptions(endpointDefinition, clientOptions, synapseInMsgCtx); // Invoke String clientIp = endpointReferenceValue.substring(6).split(":")[0]; int clientPort = Integer.parseInt(endpointReferenceValue.substring(6).split(":")[1]); Socket clientSocket = new Socket(clientIp, clientPort); DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream()); String message = synapseInMsgCtx.getProperty("updateInfoMessage").toString(); boolean isOutOnly = isOutOnly(synapseInMsgCtx); try { if (isOutOnly) { outToServer.writeBytes(message + '\n'); clientSocket.close(); return "true"; } else { BufferedReader inFromServer = new BufferedReader( new InputStreamReader(clientSocket.getInputStream())); String responseMessage = inFromServer.readLine(); log.info("FROM SERVER: " + responseMessage); clientSocket.close(); return responseMessage; } } catch (Exception ex) { handleException( "Error sending Message to url : " + ((AbstractEndpoint) endpoint).getDefinition().getAddress(), ex); } return null; } private boolean isOutOnly(MessageContext messageIn) { return "true".equals(messageIn.getProperty(SynapseConstants.OUT_ONLY)); } public void setClientRepository(String clientRepository) { this.clientRepository = clientRepository; } public void setAxis2xml(String axis2xml) { this.axis2xml = axis2xml; } private void handleException(String msg, Exception e) { log.error(msg, e); throw new SynapseException(msg, e); } private void handleException(String msg) { log.error(msg); throw new SynapseException(msg); } }