Author: richard.opalka(a)jboss.com
Date: 2007-11-28 10:05:41 -0500 (Wed, 28 Nov 2007)
New Revision: 5134
Modified:
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/RMClientHandler.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/transport/RMTransportHelper.java
Log:
minor refactoring
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-28
13:49:16 UTC (rev 5133)
+++
stack/native/trunk/src/main/java/org/jboss/ws/core/jaxws/client/ClientImpl.java 2007-11-28
15:05:41 UTC (rev 5134)
@@ -73,9 +73,9 @@
import org.jboss.ws.extensions.wsrm.RMSequenceImpl;
import org.jboss.ws.extensions.wsrm.api.RMAddressingType;
import org.jboss.ws.extensions.wsrm.api.RMException;
-import org.jboss.ws.extensions.wsrm.api.RMProvider;
import org.jboss.ws.extensions.wsrm.api.RMSequence;
import org.jboss.ws.extensions.wsrm.api.RMSequenceType;
+import org.jboss.ws.extensions.wsrm.spi.RMProvider;
import org.jboss.ws.extensions.wsrm.spi.protocol.RMCreateSequenceResponse;
import org.jboss.ws.metadata.config.Configurable;
import org.jboss.ws.metadata.config.ConfigurationProvider;
@@ -90,7 +90,7 @@
* @author Thomas.Diesler(a)jboss.org
* @since 04-Jul-2006
*/
-public class ClientImpl extends CommonClient implements RMProvider, BindingProvider21,
Configurable
+public class ClientImpl extends CommonClient implements
org.jboss.ws.extensions.wsrm.api.RMProvider, BindingProvider21, Configurable
{
// provide logging
private static Logger log = Logger.getLogger(ClientImpl.class);
@@ -290,8 +290,8 @@
}
Map<String, Object> rmRequestContext = new HashMap<String,
Object>();
List<QName> outMsgs = new LinkedList<QName>();
-
outMsgs.add(org.jboss.ws.extensions.wsrm.spi.RMProvider.get().getConstants().getSequenceQName());
-
outMsgs.add(org.jboss.ws.extensions.wsrm.spi.RMProvider.get().getConstants().getAckRequestedQName());
+ outMsgs.add(RMProvider.get().getConstants().getSequenceQName());
+ outMsgs.add(RMProvider.get().getConstants().getAckRequestedQName());
rmRequestContext.put(RMConstant.PROTOCOL_MESSAGES, outMsgs);
rmRequestContext.put(RMConstant.SEQUENCE_REFERENCE, wsrmSequence);
reqContext.put(RMConstant.REQUEST_CONTEXT, rmRequestContext);
@@ -495,19 +495,22 @@
{
if (this.wsrmSequence != null)
throw new IllegalStateException("Sequence already registered with proxy
instance");
+ if (seqType == null)
+ throw new IllegalArgumentException("Sequence type cannot be
null");
+ if (addrType == null)
+ throw new IllegalArgumentException("Addressing type cannot be
null");
try
{
// set up addressing data
+ RMSequenceImpl candidateSequence = new RMSequenceImpl(addrType, seqType,
getEndpointMetaData().getConfig().getRMMetaData());
String address = getEndpointMetaData().getEndpointAddress();
String action = RMConstant.CREATE_SEQUENCE_WSA_ACTION;
- URI backPort = null;
AddressingProperties addressingProps = null;
if (addrType == RMAddressingType.ADDRESSABLE)
{
- backPort = new
URI("http://localhost:8888/temporary_listen_address/666"); // TODO: use
generator
addressingProps = AddressingClientUtil.createDefaultProps(action,
address);
-
addressingProps.setReplyTo(AddressingBuilder.getAddressingBuilder().newEndpointReference(backPort));
+
addressingProps.setReplyTo(AddressingBuilder.getAddressingBuilder().newEndpointReference(candidateSequence.getBackPort()));
}
else
{
@@ -516,18 +519,22 @@
Map requestContext = getBindingProvider().getRequestContext();
requestContext.put(JAXWSAConstants.CLIENT_ADDRESSING_PROPERTIES_OUTBOUND,
addressingProps);
// set up wsrm request context
- QName createSequenceQN =
org.jboss.ws.extensions.wsrm.spi.RMProvider.get().getConstants().getCreateSequenceQName();
+ QName createSequenceQN =
RMProvider.get().getConstants().getCreateSequenceQName();
Map rmRequestContext = new HashMap();
List outMsgs = new LinkedList();
outMsgs.add(createSequenceQN);
rmRequestContext.put(RMConstant.PROTOCOL_MESSAGES, outMsgs);
+ rmRequestContext.put(RMConstant.SEQUENCE_REFERENCE, candidateSequence);
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 =
((RMCreateSequenceResponse)((Map)rmResponseContext.get(RMConstant.PROTOCOL_MESSAGES_MAPPING)).get(org.jboss.ws.extensions.wsrm.spi.RMProvider.get().getConstants().getCreateSequenceResponseQName())).getIdentifier();
- return this.wsrmSequence = new RMSequenceImpl(this, id, backPort);
+ RMCreateSequenceResponse createSequenceResponse =
((RMCreateSequenceResponse)((Map)rmResponseContext.get(RMConstant.PROTOCOL_MESSAGES_MAPPING)).get(RMProvider.get().getConstants().getCreateSequenceResponseQName()));
+ String outboundId = createSequenceResponse.getIdentifier();
+ candidateSequence.setClient(this);
+ candidateSequence.setOutboundId(outboundId);
+ return this.wsrmSequence = candidateSequence;
}
catch (Exception e)
{
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-28
13:49:16 UTC (rev 5133)
+++
stack/native/trunk/src/main/java/org/jboss/ws/extensions/wsrm/RMClientHandler.java 2007-11-28
15:05:41 UTC (rev 5134)
@@ -89,6 +89,7 @@
rmRequestContext.put(RMConstant.WSA_MESSAGE_ID, optionalMessageId);
rmRequestContext.put(RMConstant.PROTOCOL_MESSAGES_MAPPING, data);
SOAPMessage soapMessage = ((SOAPMessageContext)commonMsgContext).getMessage();
+ RMSequenceImpl sequenceImpl =
(RMSequenceImpl)rmRequestContext.get(RMConstant.SEQUENCE_REFERENCE);
QName msgQName = rmConstants.getCreateSequenceQName();
if (outMsgs.contains(msgQName))
@@ -106,7 +107,6 @@
if (outMsgs.contains(msgQName))
{
// try to serialize Sequence to message
- RMSequenceImpl sequenceImpl =
(RMSequenceImpl)rmRequestContext.get(RMConstant.SEQUENCE_REFERENCE);
RMSequence sequence = rmFactory.newSequence();
sequence.setIdentifier(sequenceImpl.getOutboundId());
sequence.setMessageNumber(sequenceImpl.newMessageNumber());
@@ -119,7 +119,6 @@
if (outMsgs.contains(msgQName))
{
// try to serialize AckRequested to message
- RMSequenceImpl sequenceImpl =
(RMSequenceImpl)rmRequestContext.get(RMConstant.SEQUENCE_REFERENCE);
RMAckRequested ackRequested = rmFactory.newAckRequested();
ackRequested.setIdentifier(sequenceImpl.getOutboundId());
ackRequested.setMessageNumber(sequenceImpl.getLastMessageNumber());
@@ -132,7 +131,6 @@
if (outMsgs.contains(msgQName))
{
// try to serialize CloseSequence to message
- RMSequenceImpl sequenceImpl =
(RMSequenceImpl)rmRequestContext.get(RMConstant.SEQUENCE_REFERENCE);
RMCloseSequence closeSequence = rmFactory.newCloseSequence();
closeSequence.setIdentifier(sequenceImpl.getOutboundId());
closeSequence.setLastMsgNumber(sequenceImpl.getLastMessageNumber());
@@ -145,7 +143,6 @@
if (outMsgs.contains(msgQName))
{
// try to serialize CloseSequenceResponse to message
- RMSequenceImpl sequenceImpl =
(RMSequenceImpl)rmRequestContext.get(RMConstant.SEQUENCE_REFERENCE);
RMCloseSequenceResponse closeSequenceResponse =
rmFactory.newCloseSequenceResponse();
closeSequenceResponse.setIdentifier(sequenceImpl.getOutboundId());
data.put(msgQName, closeSequenceResponse);
@@ -156,7 +153,6 @@
if (outMsgs.contains(msgQName))
{
// try to serialize TerminateSequence to message
- RMSequenceImpl sequenceImpl =
(RMSequenceImpl)rmRequestContext.get(RMConstant.SEQUENCE_REFERENCE);
RMTerminateSequence terminateSequence = rmFactory.newTerminateSequence();
terminateSequence.setIdentifier(sequenceImpl.getOutboundId());
terminateSequence.setLastMsgNumber(sequenceImpl.getLastMessageNumber());
@@ -169,7 +165,6 @@
if (outMsgs.contains(msgQName))
{
// try to serialize terminateSequenceResponse to message
- RMSequenceImpl sequenceImpl =
(RMSequenceImpl)rmRequestContext.get(RMConstant.SEQUENCE_REFERENCE);
RMTerminateSequenceResponse terminateSequenceResponse =
rmFactory.newTerminateSequenceResponse();
terminateSequenceResponse.setIdentifier(sequenceImpl.getOutboundId());
data.put(msgQName, terminateSequenceResponse);
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-28
13:49:16 UTC (rev 5133)
+++
stack/native/trunk/src/main/java/org/jboss/ws/extensions/wsrm/RMSequenceImpl.java 2007-11-28
15:05:41 UTC (rev 5134)
@@ -22,6 +22,7 @@
package org.jboss.ws.extensions.wsrm;
import java.net.URI;
+import java.net.URISyntaxException;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
@@ -40,8 +41,11 @@
import org.jboss.logging.Logger;
import org.jboss.ws.core.jaxws.client.ClientImpl;
import org.jboss.ws.extensions.addressing.AddressingClientUtil;
+import org.jboss.ws.extensions.wsrm.api.RMAddressingType;
import org.jboss.ws.extensions.wsrm.api.RMException;
import org.jboss.ws.extensions.wsrm.api.RMSequence;
+import org.jboss.ws.extensions.wsrm.api.RMSequenceType;
+import org.jboss.ws.extensions.wsrm.config.RMConfig;
import org.jboss.ws.extensions.wsrm.spi.RMConstants;
import org.jboss.ws.extensions.wsrm.spi.RMProvider;
import org.jboss.ws.extensions.wsrm.transport.RMUnassignedMessageListener;
@@ -60,10 +64,13 @@
private static final Logger logger = Logger.getLogger(RMSequenceImpl.class);
private static final RMConstants wsrmConstants = RMProvider.get().getConstants();
- private final String incomingSequenceId;
- private final String outgoingSequenceId;
- private final URI backPort;
- private final ClientImpl client;
+ private final String incomingSequenceId = "http://sequence/id/123"; // TODO:
use generator
+ private final RMConfig wsrmConfig;
+ private final RMSequenceType sequenceType;
+ private final RMAddressingType addrType;
+ private String outgoingSequenceId;
+ private URI backPort;
+ private ClientImpl client;
// object states variables
private boolean terminated = false;
private boolean discarded = false;
@@ -71,11 +78,6 @@
private final Lock objectLock = new ReentrantLock();
private AtomicInteger countOfUnassignedMessagesAvailable = new AtomicInteger();
- public RMSequenceImpl(ClientImpl client, String outId, URI backPort)
- {
- this(client, outId, null, backPort);
- }
-
public void unassignedMessageReceived()
{
// we can't use objectLock in the method - possible deadlock
@@ -83,19 +85,55 @@
logger.debug("Unassigned message available in callback handler");
}
- public RMSequenceImpl(ClientImpl client, String outId, String inId, URI backPort)
+ public RMSequenceImpl(RMAddressingType addrType, RMSequenceType sequenceType, RMConfig
wsrmConfig)
{
super();
- this.client = client;
- this.incomingSequenceId = inId;
- this.outgoingSequenceId = outId;
- this.backPort = backPort;
- RMSequenceManager.getInstance().register(this);
+ if ((addrType == null) || (sequenceType == null) || (wsrmConfig == null))
+ throw new IllegalArgumentException();
+
+ this.addrType = addrType;
+ this.sequenceType = sequenceType;
+ this.wsrmConfig = wsrmConfig;
+ try
+ {
+ this.backPort = new
URI("http://localhost:8888/temporary_listen_address/666"); // TODO: use
generator;;
+ }
+ catch (URISyntaxException use)
+ {
+ logger.warn(use);
+ }
}
+ public final void setOutboundId(String outboundId)
+ {
+ this.objectLock.lock();
+ try
+ {
+ this.outgoingSequenceId = outboundId;
+ }
+ finally
+ {
+ this.objectLock.unlock();
+ }
+ }
+
+ public final void setClient(ClientImpl client)
+ {
+ this.objectLock.lock();
+ try
+ {
+ this.client = client;
+ RMSequenceManager.getInstance().register(this);
+ }
+ finally
+ {
+ this.objectLock.unlock();
+ }
+ }
+
public final URI getBackPort()
{
- return this.backPort;
+ return (this.addrType == RMAddressingType.ADDRESSABLE) ? this.backPort : null;
}
public final long newMessageNumber()
Modified:
stack/native/trunk/src/main/java/org/jboss/ws/extensions/wsrm/transport/RMTransportHelper.java
===================================================================
---
stack/native/trunk/src/main/java/org/jboss/ws/extensions/wsrm/transport/RMTransportHelper.java 2007-11-28
13:49:16 UTC (rev 5133)
+++
stack/native/trunk/src/main/java/org/jboss/ws/extensions/wsrm/transport/RMTransportHelper.java 2007-11-28
15:05:41 UTC (rev 5134)
@@ -3,22 +3,13 @@
import static org.jboss.ws.extensions.wsrm.RMConstant.*;
import java.net.URI;
-import java.util.List;
import java.util.Map;
-import javax.xml.namespace.QName;
-
-import org.jboss.logging.Logger;
import org.jboss.ws.extensions.wsrm.RMConstant;
import org.jboss.ws.extensions.wsrm.RMSequenceImpl;
-import org.jboss.ws.extensions.wsrm.spi.RMProvider;
-import org.jboss.ws.extensions.wsrm.spi.protocol.RMCreateSequence;
-import org.jboss.ws.extensions.wsrm.spi.protocol.RMSerializable;
public final class RMTransportHelper
{
- private static final Logger log = Logger.getLogger(RMTransportHelper.class);
-
private RMTransportHelper()
{
// no instances
@@ -31,44 +22,23 @@
public static String getMessageId(RMMessage rmRequest)
{
- Map<String, Object> invocationCtx = (Map<String,
Object>)rmRequest.getMetadata().getContext(INVOCATION_CONTEXT);
- Map<String, Object> wsrmRequestCtx = (Map<String,
Object>)invocationCtx.get(REQUEST_CONTEXT);
- return (String)wsrmRequestCtx.get(WSA_MESSAGE_ID);
+ return (String)getWsrmRequestContext(rmRequest).get(WSA_MESSAGE_ID);
}
public static URI getBackPortURI(RMMessage rmRequest)
{
+ return getSequence(rmRequest).getBackPort();
+ }
+
+ private static Map<String, Object> getWsrmRequestContext(RMMessage rmRequest)
+ {
Map<String, Object> invocationCtx = (Map<String,
Object>)rmRequest.getMetadata().getContext(INVOCATION_CONTEXT);
- Map<String, Object> wsrmRequestCtx = (Map<String,
Object>)invocationCtx.get(REQUEST_CONTEXT);
- List<RMSerializable> outMsgs =
(List<RMSerializable>)wsrmRequestCtx.get(PROTOCOL_MESSAGES);
- Map<QName, RMSerializable> msgs = (Map<QName,
RMSerializable>)wsrmRequestCtx.get(PROTOCOL_MESSAGES_MAPPING);
- QName createSequenceQName =
RMProvider.get().getConstants().getCreateSequenceQName();
- URI retVal = null;
- if (outMsgs.contains(createSequenceQName))
- {
- RMCreateSequence cs = (RMCreateSequence)msgs.get(createSequenceQName);
- try
- {
- retVal = RMConstant.WSA_ANONYMOUS_URI.equals(cs.getAcksTo()) ? null : new
URI(cs.getAcksTo());;
- }
- catch (Exception e)
- {
- log.warn(e.getMessage(), e);
- }
- }
- else
- {
- retVal =
((RMSequenceImpl)wsrmRequestCtx.get(SEQUENCE_REFERENCE)).getBackPort();
- }
-
- return retVal;
+ return (Map<String, Object>)invocationCtx.get(REQUEST_CONTEXT);
}
public static RMSequenceImpl getSequence(RMMessage rmRequest)
{
- Map<String, Object> invocationCtx = (Map<String,
Object>)rmRequest.getMetadata().getContext(INVOCATION_CONTEXT);
- Map<String, Object> wsrmRequestCtx = (Map<String,
Object>)invocationCtx.get(REQUEST_CONTEXT);
- return (RMSequenceImpl)wsrmRequestCtx.get(SEQUENCE_REFERENCE);
+ return (RMSequenceImpl)getWsrmRequestContext(rmRequest).get(SEQUENCE_REFERENCE);
}
public static boolean isOneWayOperation(RMMessage rmRequest)