Added: webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/coordinator/at/TransactionManagerImpl.java URL: http://svn.apache.org/viewcvs/webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/coordinator/at/TransactionManagerImpl.java?rev=368901&view=auto ============================================================================== --- webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/coordinator/at/TransactionManagerImpl.java (added) +++ webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/coordinator/at/TransactionManagerImpl.java Fri Jan 13 14:58:04 2006 @@ -0,0 +1,93 @@ +/* + * Copyright 2004 The Apache Software Foundation. + * + * 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.apache.kandula.coordinator.at; + +import java.rmi.RemoteException; + +import org.apache.axis.message.addressing.EndpointReference; +import org.apache.kandula.coordinator.ActivationStub; +import org.apache.kandula.coordinator.CoordinationContext; +import org.apache.kandula.coordinator.CoordinationService; + +public class TransactionManagerImpl { + + private static TransactionManagerImpl instance = new TransactionManagerImpl(); + + private static ThreadLocal threadInfo = new ThreadLocal(); + + public static TransactionManagerImpl getInstance() { + return instance; + } + + private TransactionManagerImpl() { + } + + public void begin() throws RemoteException { + begin(CoordinationService.getInstance().getActivationCoordinatorService()); + } + + public void begin(EndpointReference epr) throws RemoteException { + if (threadInfo.get() != null) + throw new IllegalStateException(); + CoordinationContext ctx; + try { + ctx = new ActivationStub(epr).createCoordinationContext(ATCoordinator.COORDINATION_TYPE_ID); + threadInfo.set(new TransactionImpl(ctx)); + } catch (RemoteException e) { + throw e; + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException(e); + } + } + + public void commit() throws RemoteException { + TransactionImpl tx = getTransaction(); + if (tx == null) + throw new IllegalStateException(); + forget(); + tx.commit(); + } + + public void rollback() throws RemoteException { + TransactionImpl tx = getTransaction(); + if (tx == null) + throw new IllegalStateException(); + forget(); + tx.rollback(); + } + + public TransactionImpl suspend() { + TransactionImpl tx = getTransaction(); + forget(); + return tx; + } + + public void resume(TransactionImpl tx) { + if (threadInfo.get() != null) + throw new IllegalStateException(); + threadInfo.set(tx); + } + + public void forget() { + threadInfo.set(null); + } + + public TransactionImpl getTransaction() { + return (TransactionImpl) threadInfo.get(); + } +} \ No newline at end of file
Added: webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/coordinator/at/TxHandler.java URL: http://svn.apache.org/viewcvs/webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/coordinator/at/TxHandler.java?rev=368901&view=auto ============================================================================== --- webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/coordinator/at/TxHandler.java (added) +++ webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/coordinator/at/TxHandler.java Fri Jan 13 14:58:04 2006 @@ -0,0 +1,71 @@ +/* + * Copyright 2004 The Apache Software Foundation. + * + * 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.apache.kandula.coordinator.at; + +import java.util.Iterator; + +import javax.xml.soap.SOAPElement; +import javax.xml.soap.SOAPException; +import javax.xml.soap.SOAPHeader; + +import org.apache.axis.AxisFault; +import org.apache.axis.MessageContext; +import org.apache.axis.handlers.BasicHandler; +import org.apache.kandula.coordinator.CoordinationContext; + +/** + * @author Dasarath Weeratunge + */ +public class TxHandler extends BasicHandler { + TransactionManagerImpl tm = TransactionManagerImpl.getInstance(); + + public void invoke(MessageContext mc) throws AxisFault { + if (mc.isClient()) { + TransactionImpl tx = tm.getTransaction(); + if (tx != null) { + try { + SOAPHeader header = mc.getCurrentMessage().getSOAPEnvelope().getHeader(); + tx.getCoordinationContex().toSOAPHeaderElement(header); + } catch (Exception e) { + throw AxisFault.makeFault(e); + } + } + } + else { + if (mc.getPastPivot()) + tm.forget(); + else { + try { + SOAPHeader header = mc.getCurrentMessage().getSOAPEnvelope().getHeader(); + Iterator iter = header.getChildElements(); + while (iter.hasNext()) { + SOAPElement e = (SOAPElement) iter.next(); + if (CoordinationContext.is(e)) { + CoordinationContext ctx = new CoordinationContext(e); + tm.resume(new TransactionImpl(ctx)); + return; + } + } + } catch (SOAPException e){ + e.printStackTrace(); + throw new AxisFault(); + } + } + + } + } +} \ No newline at end of file Added: webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/geronimo/Bridge.java URL: http://svn.apache.org/viewcvs/webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/geronimo/Bridge.java?rev=368901&view=auto ============================================================================== --- webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/geronimo/Bridge.java (added) +++ webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/geronimo/Bridge.java Fri Jan 13 14:58:04 2006 @@ -0,0 +1,83 @@ +/* + * Created on Dec 26, 2005 + * + */ +package org.apache.kandula.geronimo; + +import java.rmi.RemoteException; +import java.util.HashMap; +import java.util.Map; + +import javax.transaction.Transaction; +import javax.transaction.TransactionManager; +import javax.transaction.xa.XAException; + +import org.apache.geronimo.transaction.manager.TransactionManagerImpl; +import org.apache.kandula.coordinator.CoordinationContext; +import org.apache.kandula.wscoor.Expires; + +/** + * @author Dasarath Weeratunge + * + */ +public class Bridge { + + private static Bridge instance = new Bridge(); + + private static final int TIMEOUT_S = 60 * 60; + + public static Bridge getInstance() { + return instance; + } + + private Map inM = new HashMap(); + + TransactionManagerImpl tm; + + private Bridge() { + try { + tm = new TransactionManagerImpl(TIMEOUT_S, null, null); + } catch (XAException e) { + e.printStackTrace(); + throw new RuntimeException(e); + } + } + + public TransactionManager getTM() { + return tm; + } + + public synchronized Transaction mediate(CoordinationContext ctx) + throws RemoteException { + String id = ctx.getIdentifier().toString(); + Transaction tx = (Transaction) inM.get(id); + if (tx != null) + return tx; + Expires expires = ctx.getExpires(); + long timeout = 0; + if (expires != null) + timeout = expires.get_value().longValue(); + + try { + tm.begin(timeout); + tx = tm.suspend(); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException(e); + } + + new Mediator(tx, ctx); + + inM.put(id, tx); + return tx; + } + + public synchronized CoordinationContext mediate(Transaction tx) { + return null; + + } + + public void forget(String id) { + inM.remove(id); + } +} \ No newline at end of file Added: webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/geronimo/Mediator.java URL: http://svn.apache.org/viewcvs/webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/geronimo/Mediator.java?rev=368901&view=auto ============================================================================== --- webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/geronimo/Mediator.java (added) +++ webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/geronimo/Mediator.java Fri Jan 13 14:58:04 2006 @@ -0,0 +1,168 @@ +/* + * Created on Dec 27, 2005 + * + */ +package org.apache.kandula.geronimo; + +import java.rmi.RemoteException; + +import javax.transaction.Status; +import javax.transaction.SystemException; +import javax.transaction.Transaction; +import javax.transaction.xa.XAException; +import javax.transaction.xa.XAResource; +import javax.transaction.xa.Xid; + +import org.apache.geronimo.transaction.manager.NamedXAResource; +import org.apache.geronimo.transaction.manager.TransactionManagerImpl; +import org.apache.kandula.coordinator.CoordinationContext; +import org.apache.kandula.coordinator.at.AT2PCStatus; +import org.apache.kandula.coordinator.at.AbstractParticipant; + +/** + * @author Dasarath Weeratunge + * + */ +public class Mediator extends AbstractParticipant implements NamedXAResource { + + private int timeout = Integer.MAX_VALUE; + + private String id; + + private Transaction tx; + + private static Bridge bridge = Bridge.getInstance(); + + private static TransactionManagerImpl tm = (TransactionManagerImpl) bridge.getTM(); + + private boolean bridged = true; + + public Mediator(Transaction tx, CoordinationContext ctx) + throws RemoteException { + register(true, ctx); + id = ctx.getIdentifier().toString(); + this.tx = tx; + try { + tx.enlistResource(this); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public void commit(Xid arg0, boolean arg1) throws XAException { + if (bridged) { + forget(); + try { + getCoordinator().committedOperation(null); + } catch (Exception e) { + } + } + } + + public void end(Xid arg0, int arg1) throws XAException { + } + + public void forget(Xid arg0) throws XAException { + } + + public String getName() { + return getClass().getName(); + } + + public int getTransactionTimeout() throws XAException { + return timeout; + } + + public boolean isSameRM(XAResource rm) throws XAException { + return this == rm; + } + + public int prepare(Xid arg0) throws XAException { + if (bridged) { + forget(); + try { + getCoordinator().abortedOperation(null); + } catch (Exception e) { + } + throw new XAException(); + } else + return XAResource.XA_RDONLY; + } + + public Xid[] recover(int arg0) throws XAException { + return null; + } + + public void rollback(Xid arg0) throws XAException { + if (bridged) { + forget(); + try { + getCoordinator().abortedOperation(null); + } catch (Exception e) { + } + } + } + + public boolean setTransactionTimeout(int timeout) throws XAException { + this.timeout = timeout; + return true; + } + + public void start(Xid arg0, int arg1) throws XAException { + } + + public int prepare() throws XAException { + forget(); + return tm.prepare(tx); + } + + public void commit() throws XAException { + tm.commit(tx, false); + } + + public void rollback() throws XAException { + tm.rollback(tx); + } + + public void forget() { + if (bridged) { + bridge.forget(id); + bridged = false; + } + } + + public int getStatus() { + try { + switch (tm.getStatus()) { + case Status.STATUS_ACTIVE: + case Status.STATUS_MARKED_ROLLBACK: + return AT2PCStatus.ACTIVE; + + case Status.STATUS_PREPARING: + return AT2PCStatus.PREPARING; + + case Status.STATUS_ROLLING_BACK: + case Status.STATUS_ROLLEDBACK: + return AT2PCStatus.ABORTING; + + case Status.STATUS_PREPARED: + return AT2PCStatus.PREPARED; + + case Status.STATUS_COMMITTING: + case Status.STATUS_COMMITTED: + return AT2PCStatus.COMMITTING; + + case Status.STATUS_NO_TRANSACTION: + return AT2PCStatus.NONE; + + case Status.STATUS_UNKNOWN: + default: + throw new RuntimeException(); + } + } catch (SystemException e) { + e.printStackTrace(); + throw new RuntimeException(e); + } + } + +} \ No newline at end of file Added: webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/geronimo/TxHandler.java URL: http://svn.apache.org/viewcvs/webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/geronimo/TxHandler.java?rev=368901&view=auto ============================================================================== --- webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/geronimo/TxHandler.java (added) +++ webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/geronimo/TxHandler.java Fri Jan 13 14:58:04 2006 @@ -0,0 +1,77 @@ +/* + * Copyright 2004 The Apache Software Foundation. + * + * 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.apache.kandula.geronimo; + +import java.util.Iterator; + +import javax.transaction.Transaction; +import javax.transaction.TransactionManager; +import javax.xml.soap.SOAPElement; +import javax.xml.soap.SOAPHeader; + +import org.apache.axis.AxisFault; +import org.apache.axis.MessageContext; +import org.apache.axis.handlers.BasicHandler; +import org.apache.kandula.coordinator.CoordinationContext; + +public class TxHandler extends BasicHandler { + private Bridge bridge = Bridge.getInstance(); + + private TransactionManager tm = bridge.getTM(); + + static private ThreadLocal threadInfo = new ThreadLocal(); + + public void invoke(MessageContext mc) throws AxisFault { + try { + if (mc.getCurrentMessage() == null) + return; + + if (mc.isClient() && !mc.getPastPivot()) { +// Transaction tx = tm.getTransaction(); +// if (tx == null) +// return; +// +// SOAPHeader header = mc.getCurrentMessage().getSOAPEnvelope().getHeader(); +// CoordinationContext ctx = bridge.mediate(tx); +// ctx.toSOAPHeaderElement(header); + } else { + if (mc.getPastPivot()) { + if (threadInfo.get() == null) + return; + + tm.suspend(); + threadInfo.set(null); + } else { + SOAPHeader header = mc.getCurrentMessage().getSOAPEnvelope().getHeader(); + Iterator iter = header.getChildElements(); + while (iter.hasNext()) { + SOAPElement e = (SOAPElement) iter.next(); + if (CoordinationContext.is(e)) { + CoordinationContext ctx = new CoordinationContext(e); + Transaction tx = bridge.mediate(ctx); + tm.resume(tx); + threadInfo.set(tx); + return; + } + } + } + } + } catch (Exception e) { + throw AxisFault.makeFault(e); + } + } +} \ No newline at end of file Added: webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/utils/AddressingHeaders.java URL: http://svn.apache.org/viewcvs/webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/utils/AddressingHeaders.java?rev=368901&view=auto ============================================================================== --- webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/utils/AddressingHeaders.java (added) +++ webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/utils/AddressingHeaders.java Fri Jan 13 14:58:04 2006 @@ -0,0 +1,51 @@ +/* + * Created on Jan 6, 2006 + * + */ +package org.apache.kandula.utils; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.axis.components.uuid.UUIDGenFactory; +import org.apache.axis.message.addressing.EndpointReference; +import org.apache.axis.message.addressing.MessageID; +import org.apache.axis.message.addressing.RelatesTo; +import org.apache.axis.message.addressing.RelationshipTypeValues; +import org.apache.axis.types.URI; +import org.apache.axis.types.URI.MalformedURIException; + +/** + * @author Dasarath Weeratunge + * + */ +public class AddressingHeaders extends + org.apache.axis.message.addressing.AddressingHeaders { + + public AddressingHeaders(EndpointReference to, EndpointReference from) { + super(to); + MessageID id; + try { + id = new MessageID(new URI("uuid:" + + UUIDGenFactory.getUUIDGen().nextUUID())); + } catch (MalformedURIException e) { + e.printStackTrace(); + throw new RuntimeException(e); + } + setMessageID(id); + if (from != null) + setFrom(from); + } + + public AddressingHeaders(EndpointReference to, EndpointReference from, + EndpointReference replyTo) { + this(to, from); + setReplyTo(replyTo); + } + + public void setRelatesTo(MessageID id) { + List l = new ArrayList(1); + l.add(new RelatesTo(id, RelationshipTypeValues.RESPONSE)); + setRelatesTo(l); + } +} \ No newline at end of file Added: webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/utils/Service.java URL: http://svn.apache.org/viewcvs/webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/utils/Service.java?rev=368901&view=auto ============================================================================== --- webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/utils/Service.java (added) +++ webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/utils/Service.java Fri Jan 13 14:58:04 2006 @@ -0,0 +1,114 @@ +/* + * Copyright 2004 The Apache Software Foundation. + * + * 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.apache.kandula.utils; + +import javax.xml.namespace.QName; +import javax.xml.rpc.Call; +import javax.xml.rpc.ServiceException; + +import org.apache.axis.message.addressing.AddressingHeaders; +import org.apache.axis.message.addressing.Constants; + +public class Service extends org.apache.axis.client.Service { + AddressingHeaders headers; + + // Callback callback; + + public Service() { + } + + // public Service(EndpointReference to) { + // headers = new AddressingHeaders(to); + // } + // + // public Service(EndpointReference to, Callback callback) { + // headers = new AddressingHeaders(to); + // setCallback(callback); + // } + // + // public Service(EndpointReference to, EndpointReference replyTo, + // Callback callback) { + // headers = new AddressingHeaders(to); + // headers.setReplyTo(replyTo); + // } + // + // public void setCallback(Callback callback) { + // this.callback = callback; + // CoordinationService cs = CoordinationService.getInstance(); + // headers.setFaultTo(cs.getFaultDispatcherService(callback)); + // } + // + // public void setRelatesTo(MessageID id) { + // List l = new ArrayList(1); + // l.add(new RelatesTo(id, RelationshipTypeValues.RESPONSE)); + // headers.setRelatesTo(l); + // } + + public void setAddressingHeaders(AddressingHeaders headers) { + this.headers = headers; + } + + public Call createCall() throws ServiceException { + Call call = super.createCall(); + // if (callback != null) { + // try { + // MessageID id = new MessageID(new URI("uuid:" + // + UUIDGenFactory.getUUIDGen().nextUUID())); + // headers.setMessageID(id); + // String ref = id.toString(); + // CallbackRegistry.getInstance().registerCallback(ref, callback); + // MessageElement e = new MessageElement( + // CallbackRegistry.CALLBACK_REF, ref); + // headers.getReplyTo().getProperties().add(e); + // } catch (MalformedURIException e) { + // throw new ServiceException(e.getMessage()); + // } + // } + call.setProperty(Constants.ENV_ADDRESSING_REQUEST_HEADERS, headers); + return call; + } + + /* + * (non-Javadoc) + * + * @see javax.xml.rpc.Service#createCall(javax.xml.namespace.QName, + * javax.xml.namespace.QName) + */ + public Call createCall(QName arg0, QName arg1) throws ServiceException { + throw new UnsupportedOperationException(); + } + + /* + * (non-Javadoc) + * + * @see javax.xml.rpc.Service#createCall(javax.xml.namespace.QName, + * java.lang.String) + */ + public Call createCall(QName arg0, String arg1) throws ServiceException { + throw new UnsupportedOperationException(); + } + + /* + * (non-Javadoc) + * + * @see javax.xml.rpc.Service#createCall(javax.xml.namespace.QName) + */ + public Call createCall(QName arg0) throws ServiceException { + throw new UnsupportedOperationException(); + } + +} \ No newline at end of file Added: webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/utils/SoapFaultSender.java URL: http://svn.apache.org/viewcvs/webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/utils/SoapFaultSender.java?rev=368901&view=auto ============================================================================== --- webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/utils/SoapFaultSender.java (added) +++ webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/utils/SoapFaultSender.java Fri Jan 13 14:58:04 2006 @@ -0,0 +1,60 @@ +/* + * Created on Jan 3, 2006 + * + */ +package org.apache.kandula.utils; + +import java.net.MalformedURLException; + +import javax.xml.rpc.ServiceException; + +import org.apache.axis.AxisFault; +import org.apache.axis.MessageContext; +import org.apache.axis.client.Call; +import org.apache.axis.message.SOAPEnvelope; +import org.apache.axis.message.SOAPFault; +import org.apache.axis.message.addressing.Constants; +import org.apache.axis.message.addressing.EndpointReference; +import org.apache.axis.message.addressing.MessageID; +import org.apache.axis.soap.SOAPConstants; + +/** + * @author Dasarath Weeratunge + * + */ +public class SoapFaultSender { + + private static MessageID getCurrentMessageID() { + org.apache.axis.message.addressing.AddressingHeaders headers = (org.apache.axis.message.addressing.AddressingHeaders) MessageContext.getCurrentContext().getProperty( + Constants.ENV_ADDRESSING_REQUEST_HEADERS); + return headers.getMessageID(); + } + + public static void invoke(EndpointReference faultTo, String action, + AxisFault fault) throws AxisFault, MalformedURLException, + ServiceException { + if (faultTo == null) + throw fault; + + AddressingHeaders headers = new AddressingHeaders(faultTo, null); + headers.setRelatesTo(getCurrentMessageID()); + Service service = new Service(); + service.setAddressingHeaders(headers); + Call call = (Call) service.createCall(); + call.setTargetEndpointAddress(TCPSnifferHelper.redirect(faultTo.getAddress().toString())); + call.setSOAPActionURI(action); + + SOAPEnvelope env = new SOAPEnvelope(); + SOAPFault faultElement = new SOAPFault(fault); + env.addBodyElement(faultElement); + // FIXME: + faultElement.setQName(SOAPConstants.SOAP11_CONSTANTS.getFaultQName()); + // FIXME: + fault.setFaultDetail(null); + + try { + call.invoke(env); + } catch (Exception e) { + } + } +} \ No newline at end of file Added: webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/utils/TCPSnifferHelper.java URL: http://svn.apache.org/viewcvs/webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/utils/TCPSnifferHelper.java?rev=368901&view=auto ============================================================================== --- webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/utils/TCPSnifferHelper.java (added) +++ webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula/utils/TCPSnifferHelper.java Fri Jan 13 14:58:04 2006 @@ -0,0 +1,19 @@ +/* + * Created on Dec 23, 2005 + * + */ +package org.apache.kandula.utils; + + +/** + * @author Dasarath Weeratunge + * + */ +public class TCPSnifferHelper { + + public static String redirect(String url) { + return url.replaceAll("wsi\\.alphaworks\\.ibm\\.com:8080", + "localhost:8082"); + } + +} \ No newline at end of file --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
