Author: richard.opalka(a)jboss.com
Date: 2007-11-26 07:18:41 -0500 (Mon, 26 Nov 2007)
New Revision: 5110
Modified:
stack/native/trunk/src/main/java/org/jboss/ws/core/CommonClient.java
stack/native/trunk/src/main/java/org/jboss/ws/core/jaxws/client/ClientImpl.java
stack/native/trunk/src/main/java/org/jboss/ws/extensions/wsrm/RMChannel.java
stack/native/trunk/src/main/java/org/jboss/ws/extensions/wsrm/RMClientHandler.java
stack/native/trunk/src/main/java/org/jboss/ws/extensions/wsrm/RMConstant.java
stack/native/trunk/src/main/java/org/jboss/ws/extensions/wsrm/RMHelper.java
stack/native/trunk/src/main/java/org/jboss/ws/extensions/wsrm/RMSequenceImpl.java
stack/native/trunk/src/main/java/org/jboss/ws/extensions/wsrm/backchannel/RMBackPortsServer.java
stack/native/trunk/src/test/java/org/jboss/test/ws/jaxws/wsrm/emulator/EndpointEmulator.java
stack/native/trunk/src/test/java/org/jboss/test/ws/jaxws/wsrm/emulator/Util.java
stack/native/trunk/src/test/resources/jaxws/wsrm/properties/ReqResTestCase.properties
Log:
refactoring + enabling inbound messages handler for all WS-RM messages
Modified: stack/native/trunk/src/main/java/org/jboss/ws/core/CommonClient.java
===================================================================
--- stack/native/trunk/src/main/java/org/jboss/ws/core/CommonClient.java 2007-11-26
11:26:17 UTC (rev 5109)
+++ stack/native/trunk/src/main/java/org/jboss/ws/core/CommonClient.java 2007-11-26
12:18:41 UTC (rev 5110)
@@ -54,6 +54,7 @@
import org.jboss.ws.core.soap.UnboundHeader;
import org.jboss.ws.core.utils.HolderUtils;
import org.jboss.ws.extensions.addressing.AddressingConstantsImpl;
+import org.jboss.ws.extensions.wsrm.RMConstant;
import org.jboss.ws.metadata.umdm.ClientEndpointMetaData;
import org.jboss.ws.metadata.umdm.EndpointMetaData;
import org.jboss.ws.metadata.umdm.OperationMetaData;
@@ -353,7 +354,8 @@
// Get the return object
Object retObj = null;
- if (oneway == false && handlerPass)
+ boolean isWsrmMessage = msgContext.get(RMConstant.REQUEST_CONTEXT) != null;
+ if ((oneway == false && handlerPass) || isWsrmMessage)
{
// Verify
if (binding instanceof CommonSOAPBinding)
Modified: stack/native/trunk/src/main/java/org/jboss/ws/core/jaxws/client/ClientImpl.java
===================================================================
---
stack/native/trunk/src/main/java/org/jboss/ws/core/jaxws/client/ClientImpl.java 2007-11-26
11:26:17 UTC (rev 5109)
+++
stack/native/trunk/src/main/java/org/jboss/ws/core/jaxws/client/ClientImpl.java 2007-11-26
12:18:41 UTC (rev 5110)
@@ -27,6 +27,7 @@
import java.rmi.RemoteException;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Observable;
@@ -287,8 +288,10 @@
addressingProps.setReplyTo(AddressingBuilder.getAddressingBuilder().newEndpointReference(this.wsrmSequence.getBackPort()));
}
Map<String, Object> rmRequestContext = new HashMap<String,
Object>();
- QName sequenceQName = Provider.get().getConstants().getSequenceQName();
- rmRequestContext.put(RMConstant.OPERATION_QNAME, sequenceQName);
+ List<QName> outMsgs = new LinkedList<QName>();
+ outMsgs.add(Provider.get().getConstants().getSequenceQName());
+ outMsgs.add(Provider.get().getConstants().getAckRequestedQName());
+ rmRequestContext.put(RMConstant.PROTOCOL_MESSAGES, outMsgs);
rmRequestContext.put(RMConstant.SEQUENCE_REFERENCE, wsrmSequence);
reqContext.put(RMConstant.REQUEST_CONTEXT, rmRequestContext);
}
@@ -514,13 +517,15 @@
// set up wsrm request context
QName createSequenceQN =
Provider.get().getConstants().getCreateSequenceQName();
Map rmRequestContext = new HashMap();
- rmRequestContext.put(RMConstant.OPERATION_QNAME, createSequenceQN);
+ List outMsgs = new LinkedList();
+ outMsgs.add(createSequenceQN);
+ rmRequestContext.put(RMConstant.PROTOCOL_MESSAGES, outMsgs);
requestContext.put(RMConstant.REQUEST_CONTEXT, rmRequestContext);
// invoke stub method
invoke(createSequenceQN, new Object[] {},
getBindingProvider().getResponseContext());
// read WSRM sequence id from response context
Map rmResponseContext =
(Map)getBindingProvider().getResponseContext().get(RMConstant.RESPONSE_CONTEXT);
- String id =
((CreateSequenceResponse)((List)rmResponseContext.get(RMConstant.DATA)).get(0)).getIdentifier();
+ String id =
((CreateSequenceResponse)((Map)rmResponseContext.get(RMConstant.PROTOCOL_MESSAGES_MAPPING)).get(Provider.get().getConstants().getCreateSequenceResponseQName())).getIdentifier();
return this.wsrmSequence = new RMSequenceImpl(this, id, backPort);
}
catch (Exception e)
Modified: stack/native/trunk/src/main/java/org/jboss/ws/extensions/wsrm/RMChannel.java
===================================================================
---
stack/native/trunk/src/main/java/org/jboss/ws/extensions/wsrm/RMChannel.java 2007-11-26
11:26:17 UTC (rev 5109)
+++
stack/native/trunk/src/main/java/org/jboss/ws/extensions/wsrm/RMChannel.java 2007-11-26
12:18:41 UTC (rev 5110)
@@ -98,7 +98,7 @@
Map<String, Object> invocationContext =
rmMetadata.getContext(INVOCATION_CONTEXT);
boolean oneWay =
(Boolean)rmMetadata.getContext(INVOCATION_CONTEXT).get(ONE_WAY_OPERATION);
MessageAbstraction response = null;
- if (!oneWay)
+ //if (!oneWay)
{
byte[] payload = rmResponse.getPayload();
InputStream is = payload == null ? null : new
ByteArrayInputStream(rmResponse.getPayload());
Modified:
stack/native/trunk/src/main/java/org/jboss/ws/extensions/wsrm/RMClientHandler.java
===================================================================
---
stack/native/trunk/src/main/java/org/jboss/ws/extensions/wsrm/RMClientHandler.java 2007-11-26
11:26:17 UTC (rev 5109)
+++
stack/native/trunk/src/main/java/org/jboss/ws/extensions/wsrm/RMClientHandler.java 2007-11-26
12:18:41 UTC (rev 5110)
@@ -40,15 +40,21 @@
import org.jboss.logging.Logger;
import org.jboss.ws.core.CommonMessageContext;
import org.jboss.ws.core.jaxws.handler.GenericSOAPHandler;
+import org.jboss.ws.extensions.wsrm.client_api.RMException;
import org.jboss.ws.extensions.wsrm.spi.Constants;
import org.jboss.ws.extensions.wsrm.spi.MessageFactory;
import org.jboss.ws.extensions.wsrm.spi.Provider;
import org.jboss.ws.extensions.wsrm.spi.protocol.AckRequested;
+import org.jboss.ws.extensions.wsrm.spi.protocol.CloseSequence;
+import org.jboss.ws.extensions.wsrm.spi.protocol.CloseSequenceResponse;
import org.jboss.ws.extensions.wsrm.spi.protocol.CreateSequence;
import org.jboss.ws.extensions.wsrm.spi.protocol.CreateSequenceResponse;
import org.jboss.ws.extensions.wsrm.spi.protocol.Sequence;
+import org.jboss.ws.extensions.wsrm.spi.protocol.SequenceAcknowledgement;
+import org.jboss.ws.extensions.wsrm.spi.protocol.SequenceFault;
import org.jboss.ws.extensions.wsrm.spi.protocol.Serializable;
import org.jboss.ws.extensions.wsrm.spi.protocol.TerminateSequence;
+import org.jboss.ws.extensions.wsrm.spi.protocol.TerminateSequenceResponse;
/**
* TODO: add comment
@@ -63,20 +69,8 @@
private static final Logger log = Logger.getLogger(RMClientHandler.class);
private static final MessageFactory rmFactory = Provider.get().getMessageFactory();
private static final Constants rmConstants = Provider.get().getConstants();
- private static final Set headers;
+ private static final Set headers = RMConstant.PROTOCOL_OPERATION_QNAMES;
- static
- {
- Set temp = new HashSet();
- temp.add(rmConstants.getCreateSequenceQName());
- temp.add(rmConstants.getCloseSequenceQName());
- temp.add(rmConstants.getTerminateSequenceQName());
- temp.add(rmConstants.getCreateSequenceResponseQName());
- temp.add(rmConstants.getCloseSequenceResponseQName());
- temp.add(rmConstants.getTerminateSequenceResponseQName());
- headers = Collections.unmodifiableSet(temp);
- }
-
public Set getHeaders()
{
return headers;
@@ -84,97 +78,225 @@
protected boolean handleOutbound(MessageContext msgContext)
{
- log.debug("WS-RM handleOutbound");
+ log.debug("handling outbound message");
CommonMessageContext commonMsgContext = (CommonMessageContext)msgContext;
SOAPAddressingProperties addrProps =
(SOAPAddressingProperties)commonMsgContext.get(JAXWSAConstants.CLIENT_ADDRESSING_PROPERTIES_OUTBOUND);
+ if (addrProps == null)
+ throw new RMException("WS-Addressing properties not found in message
context");
+
Map rmRequestContext = (Map)commonMsgContext.get(RMConstant.REQUEST_CONTEXT);
- QName operation = (QName)rmRequestContext.get(RMConstant.OPERATION_QNAME);
+ List<QName> outMsgs =
(List<QName>)rmRequestContext.get(RMConstant.PROTOCOL_MESSAGES);
+ Map<QName, Serializable> data = new HashMap<QName, Serializable>();
rmRequestContext.put(RMConstant.WSA_MESSAGE_ID,
addrProps.getMessageID().getURI().toString());
- if (addrProps != null)
+ rmRequestContext.put(RMConstant.PROTOCOL_MESSAGES_MAPPING, data);
+ SOAPMessage soapMessage = ((SOAPMessageContext)commonMsgContext).getMessage();
+
+ QName msgQName = rmConstants.getCreateSequenceQName();
+ if (outMsgs.contains(msgQName))
{
- SOAPMessage soapMessage = ((SOAPMessageContext)commonMsgContext).getMessage();
- if (rmConstants.getCreateSequenceQName().equals(operation))
- {
- String replyTo = addrProps.getReplyTo().getAddress().getURI().toString();
- CreateSequence createSequence = rmFactory.newCreateSequence();
- createSequence.setAcksTo(replyTo);
- createSequence.serializeTo(soapMessage);
- List<Serializable> data = new LinkedList<Serializable>();
- data.add(createSequence);
- rmRequestContext.put(RMConstant.DATA, data);
-
- return true;
- }
+ // try to serialize CreateSequence to message
+ String replyTo = addrProps.getReplyTo().getAddress().getURI().toString();
+ CreateSequence createSequence = rmFactory.newCreateSequence();
+ createSequence.setAcksTo(replyTo);
+ createSequence.serializeTo(soapMessage);
+ data.put(msgQName, createSequence);
+ log.debug(msgQName.getLocalPart() + " WSRM message was serialized to
payload");
+ }
- if (rmConstants.getSequenceQName().equals(operation))
- {
- RMSequenceImpl sequenceImpl =
(RMSequenceImpl)rmRequestContext.get(RMConstant.SEQUENCE_REFERENCE);
- Sequence sequence = rmFactory.newSequence();
- sequence.setIdentifier(sequenceImpl.getId());
- sequence.setMessageNumber(sequenceImpl.newMessageNumber());
- sequence.serializeTo(soapMessage);
-
- List<Serializable> data = new LinkedList<Serializable>();
- data.add(sequence);
-
- // TODO: ask msgStore if there are other sequences related to the same
- // endpoint that requires ack and serialize it here
- AckRequested ackRequested = rmFactory.newAckRequested();
- ackRequested.setIdentifier(sequenceImpl.getId());
- ackRequested.setMessageNumber(sequenceImpl.getLastMessageNumber());
- ackRequested.serializeTo(soapMessage);
- data.add(ackRequested);
-
- rmRequestContext.put(RMConstant.DATA, data);
-
- return true;
- }
+ msgQName = rmConstants.getSequenceQName();
+ if (outMsgs.contains(msgQName))
+ {
+ // try to serialize Sequence to message
+ RMSequenceImpl sequenceImpl =
(RMSequenceImpl)rmRequestContext.get(RMConstant.SEQUENCE_REFERENCE);
+ Sequence sequence = rmFactory.newSequence();
+ sequence.setIdentifier(sequenceImpl.getId());
+ sequence.setMessageNumber(sequenceImpl.newMessageNumber());
+ sequence.serializeTo(soapMessage);
+ data.put(msgQName, sequence);
+ log.debug(msgQName.getLocalPart() + " WSRM message was serialized to
payload");
+ }
+
+ msgQName = rmConstants.getAckRequestedQName();
+ if (outMsgs.contains(msgQName))
+ {
+ // try to serialize AckRequested to message
+ RMSequenceImpl sequenceImpl =
(RMSequenceImpl)rmRequestContext.get(RMConstant.SEQUENCE_REFERENCE);
+ AckRequested ackRequested = rmFactory.newAckRequested();
+ ackRequested.setIdentifier(sequenceImpl.getId());
+ ackRequested.setMessageNumber(sequenceImpl.getLastMessageNumber());
+ ackRequested.serializeTo(soapMessage);
+ data.put(msgQName, ackRequested);
+ log.debug(msgQName.getLocalPart() + " WSRM message was serialized to
payload");
+ }
- if (rmConstants.getTerminateSequenceQName().equals(operation))
- {
- RMSequenceImpl sequenceImpl =
(RMSequenceImpl)rmRequestContext.get(RMConstant.SEQUENCE_REFERENCE);
- TerminateSequence terminateSequence = rmFactory.newTerminateSequence();
- terminateSequence.setIdentifier(sequenceImpl.getId());
- terminateSequence.setLastMsgNumber(sequenceImpl.getLastMessageNumber());
- terminateSequence.serializeTo(soapMessage);
-
- List<Serializable> data = new LinkedList<Serializable>();
- data.add(terminateSequence);
- rmRequestContext.put(RMConstant.DATA, data);
-
- return true;
- }
+ msgQName = rmConstants.getCloseSequenceQName();
+ if (outMsgs.contains(msgQName))
+ {
+ // try to serialize CloseSequence to message
+ RMSequenceImpl sequenceImpl =
(RMSequenceImpl)rmRequestContext.get(RMConstant.SEQUENCE_REFERENCE);
+ CloseSequence closeSequence = rmFactory.newCloseSequence();
+ closeSequence.setIdentifier(sequenceImpl.getId());
+ closeSequence.setLastMsgNumber(sequenceImpl.getLastMessageNumber());
+ closeSequence.serializeTo(soapMessage);
+ data.put(msgQName, closeSequence);
+ log.debug(msgQName.getLocalPart() + " WSRM message was serialized to
payload");
}
- else
+
+ msgQName = rmConstants.getCloseSequenceResponseQName();
+ if (outMsgs.contains(msgQName))
{
- throw new IllegalStateException();
+ // try to serialize CloseSequenceResponse to message
+ RMSequenceImpl sequenceImpl =
(RMSequenceImpl)rmRequestContext.get(RMConstant.SEQUENCE_REFERENCE);
+ CloseSequenceResponse closeSequenceResponse =
rmFactory.newCloseSequenceResponse();
+ closeSequenceResponse.setIdentifier(sequenceImpl.getId());
+ data.put(msgQName, closeSequenceResponse);
+ log.debug(msgQName.getLocalPart() + " WSRM message was serialized to
payload");
}
+ msgQName = rmConstants.getTerminateSequenceQName();
+ if (outMsgs.contains(msgQName))
+ {
+ // try to serialize TerminateSequence to message
+ RMSequenceImpl sequenceImpl =
(RMSequenceImpl)rmRequestContext.get(RMConstant.SEQUENCE_REFERENCE);
+ TerminateSequence terminateSequence = rmFactory.newTerminateSequence();
+ terminateSequence.setIdentifier(sequenceImpl.getId());
+ terminateSequence.setLastMsgNumber(sequenceImpl.getLastMessageNumber());
+ terminateSequence.serializeTo(soapMessage);
+ data.put(msgQName, terminateSequence);
+ log.debug(msgQName.getLocalPart() + " WSRM message was serialized to
payload");
+ }
+
+ msgQName = rmConstants.getTerminateSequenceResponseQName();
+ if (outMsgs.contains(msgQName))
+ {
+ // try to serialize terminateSequenceResponse to message
+ RMSequenceImpl sequenceImpl =
(RMSequenceImpl)rmRequestContext.get(RMConstant.SEQUENCE_REFERENCE);
+ TerminateSequenceResponse terminateSequenceResponse =
rmFactory.newTerminateSequenceResponse();
+ terminateSequenceResponse.setIdentifier(sequenceImpl.getId());
+ data.put(msgQName, terminateSequenceResponse);
+ log.debug(msgQName.getLocalPart() + " WSRM message was serialized to
payload");
+ }
+
+ // TODO: implement SequenceAcknowledgement handler part
+
return true;
}
protected boolean handleInbound(MessageContext msgContext)
{
- log.debug("WS-RM handleInbound");
+ log.debug("handling inbound message");
SOAPMessage soapMessage = ((SOAPMessageContext)msgContext).getMessage();
- // TODO: inspect operation type different way - don't forget on piggy-backing
- Map rmRequestContext = (Map)msgContext.get(RMConstant.REQUEST_CONTEXT);
- QName operation = (QName)rmRequestContext.get(RMConstant.OPERATION_QNAME);
- if (rmConstants.getCreateSequenceQName().equals(operation))
+ Map rmResponseContext = new HashMap();
+ List<QName> messages = new LinkedList<QName>();
+ rmResponseContext.put(RMConstant.PROTOCOL_MESSAGES, messages);
+ Map<QName, Serializable> data = new HashMap<QName, Serializable>();
+ rmResponseContext.put(RMConstant.PROTOCOL_MESSAGES_MAPPING, data);
+ msgContext.put(RMConstant.RESPONSE_CONTEXT, rmResponseContext);
+ msgContext.setScope(RMConstant.RESPONSE_CONTEXT, Scope.APPLICATION);
+
+ try
{
- CreateSequenceResponse createSequenceResponse =
rmFactory.newCreateSequenceResponse();
- createSequenceResponse.deserializeFrom(soapMessage);
- List<Serializable> data = new LinkedList<Serializable>();
- data.add(createSequenceResponse);
- Map rmResponseContext = new HashMap();
- rmResponseContext.put(RMConstant.OPERATION_QNAME,
rmConstants.getCreateSequenceResponseQName());
- rmResponseContext.put(RMConstant.DATA, data);
- msgContext.put(RMConstant.RESPONSE_CONTEXT, rmResponseContext);
- msgContext.setScope(RMConstant.RESPONSE_CONTEXT, Scope.APPLICATION);
+ // try to deserialize CreateSequenceResponse from message
+ QName msgQName = rmConstants.getCreateSequenceResponseQName();
+ CreateSequenceResponse wsrmMsg = rmFactory.newCreateSequenceResponse();
+ wsrmMsg.deserializeFrom(soapMessage);
+ messages.add(msgQName);
+ data.put(msgQName, wsrmMsg);
+ log.debug(msgQName.getLocalPart() + " WSRM message was deserialized from
payload");
}
+ catch (RMException ignore) {}
+
+ try
+ {
+ // try to deserialize AckRequested from message
+ QName msgQName = rmConstants.getAckRequestedQName();
+ AckRequested wsrmMsg = rmFactory.newAckRequested();
+ wsrmMsg.deserializeFrom(soapMessage);
+ messages.add(msgQName);
+ data.put(msgQName, wsrmMsg);
+ log.debug(msgQName.getLocalPart() + " WSRM message was deserialized from
payload");
+ }
+ catch (RMException ignore) {}
+
+ try
+ {
+ // try to deserialize Sequence from message
+ QName msgQName = rmConstants.getSequenceQName();
+ Sequence wsrmMsg = rmFactory.newSequence();
+ wsrmMsg.deserializeFrom(soapMessage);
+ messages.add(msgQName);
+ data.put(msgQName, wsrmMsg);
+ log.debug(msgQName.getLocalPart() + " WSRM message was deserialized from
payload");
+ }
+ catch (RMException ignore) {}
+
+ try
+ {
+ // try to deserialize SequenceAcknowledgement from message
+ QName msgQName = rmConstants.getSequenceAcknowledgementQName();
+ SequenceAcknowledgement wsrmMsg = rmFactory.newSequenceAcknowledgement();
+ wsrmMsg.deserializeFrom(soapMessage);
+ messages.add(msgQName);
+ data.put(msgQName, wsrmMsg);
+ log.debug(msgQName.getLocalPart() + " WSRM message was deserialized from
payload");
+ }
+ catch (RMException ignore) {}
+ try
+ {
+ // try to deserialize CloseSequence from message
+ QName msgQName = rmConstants.getCloseSequenceQName();
+ CloseSequence wsrmMsg = rmFactory.newCloseSequence();
+ wsrmMsg.deserializeFrom(soapMessage);
+ messages.add(msgQName);
+ data.put(msgQName, wsrmMsg);
+ log.debug(msgQName.getLocalPart() + " WSRM message was deserialized from
payload");
+ }
+ catch (RMException ignore) {}
+
+ try
+ {
+ // try to deserialize CloseSequence from message
+ QName msgQName = rmConstants.getCloseSequenceResponseQName();
+ CloseSequenceResponse wsrmMsg = rmFactory.newCloseSequenceResponse();
+ wsrmMsg.deserializeFrom(soapMessage);
+ messages.add(msgQName);
+ data.put(msgQName, wsrmMsg);
+ log.debug(msgQName.getLocalPart() + " WSRM message was deserialized from
payload");
+ }
+ catch (RMException ignore) {}
+
+ try
+ {
+ // try to deserialize TerminateSequence from message
+ QName msgQName = rmConstants.getTerminateSequenceQName();
+ TerminateSequence wsrmMsg = rmFactory.newTerminateSequence();
+ wsrmMsg.deserializeFrom(soapMessage);
+ messages.add(msgQName);
+ data.put(msgQName, wsrmMsg);
+ log.debug(msgQName.getLocalPart() + " WSRM message was deserialized from
payload");
+ }
+ catch (RMException ignore) {}
+
+ try
+ {
+ // try to deserialize TerminateSequenceResponse from message
+ QName msgQName = rmConstants.getTerminateSequenceResponseQName();
+ TerminateSequenceResponse wsrmMsg = rmFactory.newTerminateSequenceResponse();
+ wsrmMsg.deserializeFrom(soapMessage);
+ messages.add(msgQName);
+ data.put(msgQName, wsrmMsg);
+ log.debug(msgQName.getLocalPart() + " WSRM message was deserialized from
payload");
+ }
+ catch (RMException ignore) {}
+
+ // TODO: implement SequenceFault deserialization
+
+ if (data.size() == 0)
+ throw new RMException("RM handler was not able to find WS-RM message in the
payload");
+
return true;
}
Modified: stack/native/trunk/src/main/java/org/jboss/ws/extensions/wsrm/RMConstant.java
===================================================================
---
stack/native/trunk/src/main/java/org/jboss/ws/extensions/wsrm/RMConstant.java 2007-11-26
11:26:17 UTC (rev 5109)
+++
stack/native/trunk/src/main/java/org/jboss/ws/extensions/wsrm/RMConstant.java 2007-11-26
12:18:41 UTC (rev 5110)
@@ -1,8 +1,10 @@
package org.jboss.ws.extensions.wsrm;
import java.util.Collections;
+import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
+import java.util.Set;
import javax.xml.namespace.QName;
import javax.xml.ws.addressing.AddressingBuilder;
@@ -21,35 +23,36 @@
public static final String SERIALIZATION_CONTEXT = PREFIX +
".serializationContext";
public static final String REMOTING_INVOCATION_CONTEXT = PREFIX +
".remotingInvocationContext";
public static final String REMOTING_CONFIGURATION_CONTEXT = PREFIX +
".remotingConfigurationContext";
- public static final String OPERATION_QNAME = PREFIX + ".operationType";
public static final String REQUEST_CONTEXT = PREFIX + ".requestContext";
public static final String RESPONSE_CONTEXT = PREFIX + ".responseContext";
public static final String SEQUENCE_REFERENCE = PREFIX +
".sequenceReference";
- public static final String DATA = PREFIX + ".data";
+ public static final String PROTOCOL_MESSAGES = PREFIX +
".protocolMessages";
+ public static final String PROTOCOL_MESSAGES_MAPPING = PREFIX +
".protocolMessagesMapping";
// WS-Addressing related actions
public static final String CREATE_SEQUENCE_WSA_ACTION;
public static final String CLOSE_SEQUENCE_WSA_ACTION;
public static final String TERMINATE_SEQUENCE_WSA_ACTION;
- public static final List<QName> PROTOCOL_OPERATION_QNAMES;
+ public static final Set<QName> PROTOCOL_OPERATION_QNAMES;
public static final String WSA_ANONYMOUS_URI =
AddressingBuilder.getAddressingBuilder().newAddressingConstants().getAnonymousURI();
public static final String WSA_MESSAGE_ID = PREFIX + ".wsaMessageId";
static
{
- LinkedList<QName> temp = new LinkedList<QName>();
+ Set<QName> temp = new HashSet<QName>();
Constants constants = Provider.get().getConstants();
+ temp.add(constants.getSequenceQName());
+ temp.add(constants.getSequenceFaultQName());
+ temp.add(constants.getAcknowledgementRangeQName());
+ temp.add(constants.getAckRequestedQName());
temp.add(constants.getCreateSequenceQName());
temp.add(constants.getCreateSequenceResponseQName());
- temp.add(constants.getSequenceQName());
- temp.add(constants.getAckRequestedQName());
temp.add(constants.getCloseSequenceQName());
- temp.add(constants.getSequenceAcknowledgementQName());
temp.add(constants.getCloseSequenceResponseQName());
temp.add(constants.getTerminateSequenceQName());
temp.add(constants.getTerminateSequenceResponseQName());
- PROTOCOL_OPERATION_QNAMES = Collections.unmodifiableList(temp);
+ PROTOCOL_OPERATION_QNAMES = Collections.unmodifiableSet(temp);
CREATE_SEQUENCE_WSA_ACTION = Provider.get().getConstants().getNamespaceURI() +
"/CreateSequence";
CLOSE_SEQUENCE_WSA_ACTION = Provider.get().getConstants().getNamespaceURI() +
"/CloseSequence";
TERMINATE_SEQUENCE_WSA_ACTION = Provider.get().getConstants().getNamespaceURI() +
"/TerminateSequence";
Modified: stack/native/trunk/src/main/java/org/jboss/ws/extensions/wsrm/RMHelper.java
===================================================================
--- stack/native/trunk/src/main/java/org/jboss/ws/extensions/wsrm/RMHelper.java 2007-11-26
11:26:17 UTC (rev 5109)
+++ stack/native/trunk/src/main/java/org/jboss/ws/extensions/wsrm/RMHelper.java 2007-11-26
12:18:41 UTC (rev 5110)
@@ -6,7 +6,10 @@
import java.util.List;
import java.util.Map;
+import javax.xml.namespace.QName;
+
import org.jboss.logging.Logger;
+import org.jboss.ws.extensions.wsrm.spi.Provider;
import org.jboss.ws.extensions.wsrm.spi.protocol.CreateSequence;
import org.jboss.ws.extensions.wsrm.spi.protocol.Serializable;
@@ -38,11 +41,13 @@
{
Map<String, Object> invocationCtx = (Map<String,
Object>)rmRequest.getMetadata().getContext(INVOCATION_CONTEXT);
Map<String, Object> wsrmRequestCtx = (Map<String,
Object>)invocationCtx.get(REQUEST_CONTEXT);
- List<Serializable> wsrmMessages =
(List<Serializable>)wsrmRequestCtx.get(DATA);
+ List<Serializable> outMsgs =
(List<Serializable>)wsrmRequestCtx.get(PROTOCOL_MESSAGES);
+ Map<QName, Serializable> msgs = (Map<QName,
Serializable>)wsrmRequestCtx.get(PROTOCOL_MESSAGES_MAPPING);
+ QName createSequenceQName =
Provider.get().getConstants().getCreateSequenceQName();
URI retVal = null;
- if (wsrmMessages.get(0) instanceof CreateSequence)
+ if (outMsgs.contains(createSequenceQName))
{
- CreateSequence cs = (CreateSequence)wsrmMessages.get(0);
+ CreateSequence cs = (CreateSequence)msgs.get(createSequenceQName);
try
{
retVal = RMConstant.WSA_ANONYMOUS_URI.equals(cs.getAcksTo()) ? null : new
URI(cs.getAcksTo());;
Modified:
stack/native/trunk/src/main/java/org/jboss/ws/extensions/wsrm/RMSequenceImpl.java
===================================================================
---
stack/native/trunk/src/main/java/org/jboss/ws/extensions/wsrm/RMSequenceImpl.java 2007-11-26
11:26:17 UTC (rev 5109)
+++
stack/native/trunk/src/main/java/org/jboss/ws/extensions/wsrm/RMSequenceImpl.java 2007-11-26
12:18:41 UTC (rev 5110)
@@ -23,6 +23,8 @@
import java.net.URI;
import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;
@@ -155,7 +157,9 @@
// prepare WS-RM request context
QName terminateSequenceQN =
Provider.get().getConstants().getTerminateSequenceQName();
Map rmRequestContext = new HashMap();
- rmRequestContext.put(RMConstant.OPERATION_QNAME, terminateSequenceQN);
+ List outMsgs = new LinkedList();
+ outMsgs.add(terminateSequenceQN);
+ rmRequestContext.put(RMConstant.PROTOCOL_MESSAGES, outMsgs);
rmRequestContext.put(RMConstant.SEQUENCE_REFERENCE,
client.getWSRMSequence());
// set up method invocation context
Map requestContext = client.getBindingProvider().getRequestContext();
Modified:
stack/native/trunk/src/main/java/org/jboss/ws/extensions/wsrm/backchannel/RMBackPortsServer.java
===================================================================
---
stack/native/trunk/src/main/java/org/jboss/ws/extensions/wsrm/backchannel/RMBackPortsServer.java 2007-11-26
11:26:17 UTC (rev 5109)
+++
stack/native/trunk/src/main/java/org/jboss/ws/extensions/wsrm/backchannel/RMBackPortsServer.java 2007-11-26
12:18:41 UTC (rev 5110)
@@ -185,7 +185,7 @@
{
INSTANCE = new RMBackPortsServer(scheme, host, (port == -1) ? 80 : port);
// forking back ports server
- Thread t = new Thread(INSTANCE);
+ Thread t = new Thread(INSTANCE, "RMBackPortsServer");
t.setDaemon(true);
t.start();
// registering shutdown hook
Modified:
stack/native/trunk/src/test/java/org/jboss/test/ws/jaxws/wsrm/emulator/EndpointEmulator.java
===================================================================
---
stack/native/trunk/src/test/java/org/jboss/test/ws/jaxws/wsrm/emulator/EndpointEmulator.java 2007-11-26
11:26:17 UTC (rev 5109)
+++
stack/native/trunk/src/test/java/org/jboss/test/ws/jaxws/wsrm/emulator/EndpointEmulator.java 2007-11-26
12:18:41 UTC (rev 5110)
@@ -27,10 +27,8 @@
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
-import java.net.HttpURLConnection;
import java.net.Socket;
import java.net.URL;
-import java.net.URLConnection;
import java.util.List;
import java.util.Map;
@@ -138,7 +136,7 @@
URL url = new URL(responseTo);
Socket socket = new Socket(url.getHost(), url.getPort());
OutputStream out = socket.getOutputStream();
- out.write(Util.createHTTPHeaders(url, responseMessage.length()));
+ out.write(Util.createHTTPHeaders(url, responseMessage.length(),
view.getResponse().getContentType()));
out.write(responseMessage.getBytes());
out.flush();
out.close();
Modified:
stack/native/trunk/src/test/java/org/jboss/test/ws/jaxws/wsrm/emulator/Util.java
===================================================================
---
stack/native/trunk/src/test/java/org/jboss/test/ws/jaxws/wsrm/emulator/Util.java 2007-11-26
11:26:17 UTC (rev 5109)
+++
stack/native/trunk/src/test/java/org/jboss/test/ws/jaxws/wsrm/emulator/Util.java 2007-11-26
12:18:41 UTC (rev 5110)
@@ -68,11 +68,11 @@
private static final String CRLF = "\r\n";
- public static byte[] createHTTPHeaders(URL url, int payloadLength)
+ public static byte[] createHTTPHeaders(URL url, int payloadLength, String
contentType)
{
StringBuilder sb = new StringBuilder();
sb.append("POST " + url.getPath() + " HTTP/1.1" + CRLF);
- sb.append("Content-Type: text/xml" + CRLF);
+ sb.append("Content-Type: " + contentType + CRLF);
sb.append("Host: " + url.getHost() + ":" + url.getPort() +
CRLF);
sb.append("Content-Length: " + payloadLength + CRLF);
sb.append(CRLF);
Modified:
stack/native/trunk/src/test/resources/jaxws/wsrm/properties/ReqResTestCase.properties
===================================================================
---
stack/native/trunk/src/test/resources/jaxws/wsrm/properties/ReqResTestCase.properties 2007-11-26
11:26:17 UTC (rev 5109)
+++
stack/native/trunk/src/test/resources/jaxws/wsrm/properties/ReqResTestCase.properties 2007-11-26
12:18:41 UTC (rev 5110)
@@ -4,4 +4,4 @@
#archives=jaxws-wsrm.war, jaxws-wsrm-client.jar
archives=jaxws-wsrm-req-res-emulator.war, jaxws-wsrm-client.jar
emulator=true
-addressable=true
\ No newline at end of file
+addressable=true