You are viewing a plain text version of this content. The canonical link for it is here.
Posted to kandula-dev@ws.apache.org by da...@apache.org on 2006/01/13 23:58:12 UTC
svn commit: r368901 [2/2] - in
/webservices/kandula/branches/Kandula_1/src/java/org/apache/kandula: ./
coordinator/ coordinator/at/ geronimo/ utils/
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: kandula-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: kandula-dev-help@ws.apache.org