Author: thomas.diesler(a)jboss.com
Date: 2008-05-20 18:33:44 -0400 (Tue, 20 May 2008)
New Revision: 7116
Removed:
stack/native/trunk/modules/client/etc/
Modified:
stack/native/trunk/modules/client/pom.xml
stack/native/trunk/modules/core/src/main/java/org/jboss/ws/extensions/security/WSSecurityAPI.java
stack/native/trunk/modules/core/src/main/java/org/jboss/ws/extensions/security/WSSecurityDispatcher.java
stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxrpc/wsse/RoundTripTestCase.java
stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/jbws1988/MessageTestCase.java
Log:
Add WSSecurityAPI.cleanup()
Modified: stack/native/trunk/modules/client/pom.xml
===================================================================
--- stack/native/trunk/modules/client/pom.xml 2008-05-20 17:41:14 UTC (rev 7115)
+++ stack/native/trunk/modules/client/pom.xml 2008-05-20 22:33:44 UTC (rev 7116)
@@ -44,7 +44,9 @@
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
- <manifestFile>etc/default.mf</manifestFile>
+ <manifestEntries>
+ <Class-Path>jbossws-spi.jar jbossws-common.jar jbossws-framework.jar
jbossws-native-core.jar jbossws-native-jaxrpc.jar jbossws-native-jaxws.jar
jbossws-native-jaxws-ext.jar jbossws-native-saaj.jar activation.jar commons-logging.jar
concurrent.jar javassist.jar jaxb-api.jar jaxb-impl.jar mail.jar jboss-remoting.jar
jboss-xml-binding.jar policy.jar stax-api.jar wsdl4j.jar</Class-Path>
+ </manifestEntries>
</archive>
</configuration>
</plugin>
Modified:
stack/native/trunk/modules/core/src/main/java/org/jboss/ws/extensions/security/WSSecurityAPI.java
===================================================================
---
stack/native/trunk/modules/core/src/main/java/org/jboss/ws/extensions/security/WSSecurityAPI.java 2008-05-20
17:41:14 UTC (rev 7115)
+++
stack/native/trunk/modules/core/src/main/java/org/jboss/ws/extensions/security/WSSecurityAPI.java 2008-05-20
22:33:44 UTC (rev 7116)
@@ -72,4 +72,10 @@
* @throws SOAPException
*/
public void encodeMessage(WSSecurityConfiguration configuration, SOAPMessage message,
Config operationConfig, String user, String password) throws SOAPException;
+
+ /**
+ * Cleanup shared resources
+ */
+ public void cleanup();
+
}
Modified:
stack/native/trunk/modules/core/src/main/java/org/jboss/ws/extensions/security/WSSecurityDispatcher.java
===================================================================
---
stack/native/trunk/modules/core/src/main/java/org/jboss/ws/extensions/security/WSSecurityDispatcher.java 2008-05-20
17:41:14 UTC (rev 7115)
+++
stack/native/trunk/modules/core/src/main/java/org/jboss/ws/extensions/security/WSSecurityDispatcher.java 2008-05-20
22:33:44 UTC (rev 7116)
@@ -65,6 +65,10 @@
import org.jboss.ws.metadata.wsse.Username;
import org.jboss.ws.metadata.wsse.WSSecurityConfiguration;
import org.jboss.wsf.common.DOMWriter;
+import org.jboss.wsf.spi.SPIProvider;
+import org.jboss.wsf.spi.SPIProviderResolver;
+import org.jboss.wsf.spi.invocation.SecurityAdaptor;
+import org.jboss.wsf.spi.invocation.SecurityAdaptorFactory;
import org.w3c.dom.Element;
public class WSSecurityDispatcher implements WSSecurityAPI
@@ -72,124 +76,6 @@
// provide logging
private static Logger log = Logger.getLogger(WSSecurityDispatcher.class);
- private static List<Target>
convertTargets(List<org.jboss.ws.metadata.wsse.Target> targets)
- {
- if (targets == null)
- return null;
-
- ArrayList<Target> newList = new ArrayList<Target>(targets.size());
-
- for (org.jboss.ws.metadata.wsse.Target target : targets)
- {
- if ("qname".equals(target.getType()))
- {
- QNameTarget qnameTarget = new QNameTarget(QName.valueOf(target.getValue()),
target.isContentOnly());
- newList.add(qnameTarget);
- }
- else if ("wsuid".equals(target.getType()))
- {
- newList.add(new WsuIdTarget(target.getValue()));
- }
- }
-
- return newList;
- }
-
- private static CommonSOAPFaultException convertToFault(WSSecurityException e)
- {
- return new CommonSOAPFaultException(e.getFaultCode(), e.getFaultString());
- }
-
- private static List<RequireOperation> buildRequireOperations(Config
operationConfig)
- {
- if (operationConfig == null)
- return null;
-
- Requires requires = operationConfig.getRequires();
- if (requires == null)
- return null;
-
- ArrayList<RequireOperation> operations = new
ArrayList<RequireOperation>();
- RequireTimestamp requireTimestamp = requires.getRequireTimestamp();
- if (requireTimestamp != null)
- operations.add(new RequireTimestampOperation(requireTimestamp.getMaxAge()));
-
- RequireSignature requireSignature = requires.getRequireSignature();
- if (requireSignature != null)
- {
- List<Target> targets = convertTargets(requireSignature.getTargets());
- operations.add(new RequireSignatureOperation(targets));
- }
-
- RequireEncryption requireEncryption = requires.getRequireEncryption();
- if (requireEncryption != null)
- {
- List<Target> targets = convertTargets(requireEncryption.getTargets());
- operations.add(new RequireEncryptionOperation(targets));
- }
-
- return operations;
- }
-
- private static Config getActualConfig(WSSecurityConfiguration configuration, Config
operationConfig)
- {
- if (operationConfig == null)
- {
- //if no configuration override, we try getting the right operation config
- //according to the invoked operation that can be found using the context
- CommonMessageContext ctx = MessageContextAssociation.peekMessageContext();
- if (ctx != null)
- {
- EndpointMetaData epMetaData = ctx.getEndpointMetaData();
- QName port = epMetaData.getPortName();
-
- OperationMetaData opMetaData = ctx.getOperationMetaData();
- if (opMetaData == null)
- {
- // Get the operation meta data from the soap message
- // for the server side inbound message.
- SOAPMessageImpl soapMessage = (SOAPMessageImpl)ctx.getSOAPMessage();
- try
- {
- opMetaData = soapMessage.getOperationMetaData(epMetaData);
- }
- catch (SOAPException e)
- {
- throw new WebServiceException("Error while looking for the
operation meta data: " + e);
- }
- }
- if (opMetaData != null)
- operationConfig = selectOperationConfig(configuration, port,
opMetaData.getQName());
- }
- }
- //null operationConfig means default behavior
- return operationConfig != null ? operationConfig :
configuration.getDefaultConfig();
- }
-
- private static Config selectOperationConfig(WSSecurityConfiguration configuration,
QName portName, QName opName)
- {
- Port port = configuration.getPorts().get(portName != null ? portName.getLocalPart()
: null);
- if (port == null)
- return configuration.getDefaultConfig();
-
- Operation operation = port.getOperations().get(opName != null ? opName.toString() :
null);
- if (operation == null)
- {
- //if the operation name was not available or didn't match any wsse
configured operation,
- //we fall back to the port wsse config (if available) or the default config.
- Config portConfig = port.getDefaultConfig();
- return (portConfig == null) ? configuration.getDefaultConfig() : portConfig;
-
- }
- return operation.getConfig();
- }
-
-
- private static boolean hasRequirements(Config config)
- {
- return config != null && config.getRequires() != null;
- }
-
public void decodeMessage(WSSecurityConfiguration configuration, SOAPMessage message,
Config operationConfig) throws SOAPException
{
Config config = getActualConfig(configuration, operationConfig);
@@ -307,4 +193,130 @@
}
}
+ public void cleanup()
+ {
+ //Reset username/password since they're stored using a ThreadLocal
+ SPIProvider spiProvider = SPIProviderResolver.getInstance().getProvider();
+ SecurityAdaptor securityAdaptor =
spiProvider.getSPI(SecurityAdaptorFactory.class).newSecurityAdapter();
+ securityAdaptor.setPrincipal(null);
+ securityAdaptor.setCredential(null);
+ }
+
+ private List<Target>
convertTargets(List<org.jboss.ws.metadata.wsse.Target> targets)
+ {
+ if (targets == null)
+ return null;
+
+ ArrayList<Target> newList = new ArrayList<Target>(targets.size());
+
+ for (org.jboss.ws.metadata.wsse.Target target : targets)
+ {
+ if ("qname".equals(target.getType()))
+ {
+ QNameTarget qnameTarget = new QNameTarget(QName.valueOf(target.getValue()),
target.isContentOnly());
+ newList.add(qnameTarget);
+ }
+ else if ("wsuid".equals(target.getType()))
+ {
+ newList.add(new WsuIdTarget(target.getValue()));
+ }
+ }
+
+ return newList;
+ }
+
+ private CommonSOAPFaultException convertToFault(WSSecurityException e)
+ {
+ return new CommonSOAPFaultException(e.getFaultCode(), e.getFaultString());
+ }
+
+ private List<RequireOperation> buildRequireOperations(Config operationConfig)
+ {
+ if (operationConfig == null)
+ return null;
+
+ Requires requires = operationConfig.getRequires();
+ if (requires == null)
+ return null;
+
+ ArrayList<RequireOperation> operations = new
ArrayList<RequireOperation>();
+ RequireTimestamp requireTimestamp = requires.getRequireTimestamp();
+ if (requireTimestamp != null)
+ operations.add(new RequireTimestampOperation(requireTimestamp.getMaxAge()));
+
+ RequireSignature requireSignature = requires.getRequireSignature();
+ if (requireSignature != null)
+ {
+ List<Target> targets = convertTargets(requireSignature.getTargets());
+ operations.add(new RequireSignatureOperation(targets));
+ }
+
+ RequireEncryption requireEncryption = requires.getRequireEncryption();
+ if (requireEncryption != null)
+ {
+ List<Target> targets = convertTargets(requireEncryption.getTargets());
+ operations.add(new RequireEncryptionOperation(targets));
+ }
+
+ return operations;
+ }
+
+ private Config getActualConfig(WSSecurityConfiguration configuration, Config
operationConfig)
+ {
+ if (operationConfig == null)
+ {
+ //if no configuration override, we try getting the right operation config
+ //according to the invoked operation that can be found using the context
+ CommonMessageContext ctx = MessageContextAssociation.peekMessageContext();
+ if (ctx != null)
+ {
+ EndpointMetaData epMetaData = ctx.getEndpointMetaData();
+ QName port = epMetaData.getPortName();
+
+ OperationMetaData opMetaData = ctx.getOperationMetaData();
+ if (opMetaData == null)
+ {
+ // Get the operation meta data from the soap message
+ // for the server side inbound message.
+ SOAPMessageImpl soapMessage = (SOAPMessageImpl)ctx.getSOAPMessage();
+ try
+ {
+ opMetaData = soapMessage.getOperationMetaData(epMetaData);
+ }
+ catch (SOAPException e)
+ {
+ throw new WebServiceException("Error while looking for the
operation meta data: " + e);
+ }
+ }
+ if (opMetaData != null)
+ operationConfig = selectOperationConfig(configuration, port,
opMetaData.getQName());
+ }
+ }
+ //null operationConfig means default behavior
+ return operationConfig != null ? operationConfig :
configuration.getDefaultConfig();
+ }
+
+ private Config selectOperationConfig(WSSecurityConfiguration configuration, QName
portName, QName opName)
+ {
+ Port port = configuration.getPorts().get(portName != null ? portName.getLocalPart()
: null);
+ if (port == null)
+ return configuration.getDefaultConfig();
+
+ Operation operation = port.getOperations().get(opName != null ? opName.toString() :
null);
+ if (operation == null)
+ {
+ //if the operation name was not available or didn't match any wsse
configured operation,
+ //we fall back to the port wsse config (if available) or the default config.
+ Config portConfig = port.getDefaultConfig();
+ return (portConfig == null) ? configuration.getDefaultConfig() : portConfig;
+
+ }
+ return operation.getConfig();
+ }
+
+
+ private boolean hasRequirements(Config config)
+ {
+ return config != null && config.getRequires() != null;
+ }
}
Modified:
stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxrpc/wsse/RoundTripTestCase.java
===================================================================
---
stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxrpc/wsse/RoundTripTestCase.java 2008-05-20
17:41:14 UTC (rev 7115)
+++
stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxrpc/wsse/RoundTripTestCase.java 2008-05-20
22:33:44 UTC (rev 7116)
@@ -53,10 +53,6 @@
import org.jboss.ws.metadata.wsse.WSSecurityConfiguration;
import org.jboss.ws.metadata.wsse.WSSecurityOMFactory;
import org.jboss.wsf.common.DOMWriter;
-import org.jboss.wsf.spi.SPIProvider;
-import org.jboss.wsf.spi.SPIProviderResolver;
-import org.jboss.wsf.spi.invocation.SecurityAdaptor;
-import org.jboss.wsf.spi.invocation.SecurityAdaptorFactory;
import org.jboss.wsf.test.JBossWSTest;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -71,12 +67,20 @@
/** Test that we can build an envelope from InputStream */
public void testRoundTrip() throws Exception
{
- String envStr = "<env:Envelope
xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'>" + "
<env:Header>"
- + " <tns:someHeader
xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'"
- + " tns:test='hi'
xmlns:tns='http://org.jboss.ws/2004'>some header
value</tns:someHeader>" + " </env:Header> " + "
<env:Body>"
- + " <tns:echoString2
xmlns:tns='http://org.jboss.ws/2004'>" + " <string>Hello
World!</string>" + " </tns:echoString2>"
- + " <tns:echoString
xmlns:tns='http://org.jboss.ws/2004'>" + " <string>Hello
World!</string>" + " </tns:echoString>" + "
</env:Body>"
- + "</env:Envelope>";
+ String envStr = "<env:Envelope
xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'>"
+ + " <env:Header>"
+ + " <tns:someHeader
xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'"
+ + " tns:test='hi'
xmlns:tns='http://org.jboss.ws/2004'>some header
value</tns:someHeader>"
+ + " </env:Header> "
+ + " <env:Body>"
+ + " <tns:echoString2
xmlns:tns='http://org.jboss.ws/2004'>"
+ + " <string>Hello World!</string>"
+ + " </tns:echoString2>"
+ + " <tns:echoString
xmlns:tns='http://org.jboss.ws/2004'>"
+ + " <string>Hello World!</string>"
+ + " </tns:echoString>"
+ + " </env:Body>"
+ + "</env:Envelope>";
ByteArrayInputStream inputStream = new ByteArrayInputStream(envStr.getBytes());
MessageFactory factory = new MessageFactoryImpl();
@@ -113,28 +117,43 @@
public void testRoundTripUsingAPI() throws Exception
{
- String envStr = "<env:Envelope
xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'>" + "
<env:Header>"
- + " <tns:someHeader
xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'"
- + " tns:test='hi'
xmlns:tns='http://org.jboss.ws/2004'>some header
value</tns:someHeader>" + " </env:Header> "
- + " <env:Body wsu:Id='element-9-1205139829909-17908832'
xmlns:wsu='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-ws...
- + " <tns:echoString2
xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'
xmlns:tns='http://org.jboss.ws/2004' "
- + "
xmlns:wsu='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-ws...
+ " <string>Hello World!</string>"
- + " </tns:echoString2>" + " <tns:echoString
xmlns:tns='http://org.jboss.ws/2004'>" + " <string>Hello
World!</string>" + " </tns:echoString>"
- + " </env:Body>" + "</env:Envelope>";
+ String envStr = "<env:Envelope
xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'>"
+ + " <env:Header>"
+ + " <tns:someHeader
xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'"
+ + " tns:test='hi'
xmlns:tns='http://org.jboss.ws/2004'>some header
value</tns:someHeader>"
+ + " </env:Header> "
+ + " <env:Body wsu:Id='element-9-1205139829909-17908832'
xmlns:wsu='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-ws...
+ + " <tns:echoString2
xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'
xmlns:tns='http://org.jboss.ws/2004' "
+ + "
xmlns:wsu='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-ws...
+ + " <string>Hello World!</string>"
+ + " </tns:echoString2>"
+ + " <tns:echoString
xmlns:tns='http://org.jboss.ws/2004'>"
+ + " <string>Hello World!</string>"
+ + " </tns:echoString>"
+ + " </env:Body>"
+ + "</env:Envelope>";
String conf = "<jboss-ws-security
xmlns='http://www.jboss.com/ws-security/config'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'"
- + "
xsi:schemaLocation='http://www.jboss.com/ws-security/config
http://www.jboss.com/ws-security/schema/jboss-ws-security_1_0.xsd'>... + "
<config>"
- + " <encrypt type='x509v3' alias='wsse'/>"
+ " <sign alias='wsse'/>" + " <username/>" +
" <requires>" + " <encryption/>"
- + " <signature/>" + " </requires>" +
" </config>" + "</jboss-ws-security>";
+ + "
xsi:schemaLocation='http://www.jboss.com/ws-security/config
http://www.jboss.com/ws-security/schema/jboss-ws-security_1_0.xsd'>...
+ + " <config>"
+ + " <encrypt type='x509v3' alias='wsse'/>"
+ + " <sign alias='wsse'/>"
+ + " <username/>"
+ + " <requires>"
+ + " <encryption/>"
+ + " <signature/>"
+ + " </requires>"
+ + " </config>"
+ + "</jboss-ws-security>";
WSSecurityConfiguration configuration = WSSecurityOMFactory.newInstance().parse(new
StringReader(conf));
ByteArrayInputStream inputStream = new ByteArrayInputStream(envStr.getBytes());
MessageFactory factory = new MessageFactoryImpl();
SOAPMessage soapMsg = factory.createMessage(null, inputStream);
String expected = DOMWriter.printNode(soapMsg.getSOAPPart().getEnvelope(), true);
+ WSSecurityAPI sec = new WSSecurityDispatcher();
try
{
- WSSecurityAPI sec = new WSSecurityDispatcher();
sec.encodeMessage(configuration, soapMsg, null, "kermit",
"thefrog");
sec.decodeMessage(configuration, soapMsg, null);
@@ -143,11 +162,7 @@
}
finally
{
- //Reset username/password since they're stored using a ThreadLocal
- SPIProvider spiProvider = SPIProviderResolver.getInstance().getProvider();
- SecurityAdaptor securityAdaptor =
spiProvider.getSPI(SecurityAdaptorFactory.class).newSecurityAdapter();
- securityAdaptor.setPrincipal(null);
- securityAdaptor.setCredential(null);
+ sec.cleanup();
}
}
Modified:
stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/jbws1988/MessageTestCase.java
===================================================================
---
stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/jbws1988/MessageTestCase.java 2008-05-20
17:41:14 UTC (rev 7115)
+++
stack/native/trunk/modules/testsuite/native-tests/src/test/java/org/jboss/test/ws/jaxws/jbws1988/MessageTestCase.java 2008-05-20
22:33:44 UTC (rev 7116)
@@ -40,10 +40,6 @@
import org.jboss.ws.metadata.wsse.WSSecurityConfiguration;
import org.jboss.ws.metadata.wsse.WSSecurityOMFactory;
import org.jboss.wsf.common.DOMUtils;
-import org.jboss.wsf.spi.SPIProvider;
-import org.jboss.wsf.spi.SPIProviderResolver;
-import org.jboss.wsf.spi.invocation.SecurityAdaptor;
-import org.jboss.wsf.spi.invocation.SecurityAdaptorFactory;
import org.jboss.wsf.test.JBossWSTest;
import org.jboss.xb.binding.SimpleTypeBindings;
import org.w3c.dom.Element;
@@ -56,6 +52,22 @@
*/
public class MessageTestCase extends JBossWSTest
{
+ private WSSecurityAPI sec;
+
+ @Override
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+ sec = new WSSecurityDispatcher();
+ }
+
+ @Override
+ protected void tearDown() throws Exception
+ {
+ super.tearDown();
+ sec.cleanup();
+ }
+
private String serverConf = "<jboss-ws-security
xmlns='http://www.jboss.com/ws-security/config' "
+ "xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' "
+ "xsi:schemaLocation='http://www.jboss.com/ws-security/config "
@@ -112,10 +124,9 @@
//"2008-03-12T17:12:31.310Z"
Calendar created = new GregorianCalendar(TimeZone.getTimeZone("UTC"));
- WSSecurityAPI sec = new WSSecurityDispatcher();
sec.decodeMessage(configuration, getMessage(created, envStr), null);
+ created.add(Calendar.MINUTE, -10);
- created.add(Calendar.MINUTE, -10);
try
{
sec.decodeMessage(configuration, getMessage(created, envStr), null);
@@ -125,14 +136,6 @@
{
//OK
}
- finally
- {
- //Reset username/password since they're stored using a ThreadLocal
- SPIProvider spiProvider = SPIProviderResolver.getInstance().getProvider();
- SecurityAdaptor securityAdaptor =
spiProvider.getSPI(SecurityAdaptorFactory.class).newSecurityAdapter();
- securityAdaptor.setPrincipal(null);
- securityAdaptor.setCredential(null);
- }
}
private SOAPMessage getMessage(Calendar created, String envStr) throws Exception
@@ -149,7 +152,6 @@
ByteArrayInputStream inputStream = new
ByteArrayInputStream(testMessage.getBytes());
MessageFactory factory = new MessageFactoryImpl();
SOAPMessage soapMsg = factory.createMessage(null, inputStream);
- WSSecurityAPI sec = new WSSecurityDispatcher();
sec.encodeMessage(configuration, soapMsg, null, "kermit",
"therealfrog");
Element securityEl =
(Element)soapMsg.getSOAPHeader().getChildElements(Constants.WSSE_HEADER_QNAME).next();
Element usernameTokenEl = (Element)DOMUtils.getChildElements(securityEl, new
QName(Constants.WSSE_NS, "UsernameToken")).next();
@@ -169,7 +171,6 @@
ByteArrayInputStream inputStream = new
ByteArrayInputStream(testMessage.getBytes());
MessageFactory factory = new MessageFactoryImpl();
SOAPMessage soapMsg = factory.createMessage(null, inputStream);
- WSSecurityAPI sec = new WSSecurityDispatcher();
Username username = new Username(true, true, false);
Config config = new Config();
config.setUsername(username);
@@ -190,7 +191,6 @@
ByteArrayInputStream inputStream = new
ByteArrayInputStream(testMessage.getBytes());
MessageFactory factory = new MessageFactoryImpl();
SOAPMessage soapMsg = factory.createMessage(null, inputStream);
- WSSecurityAPI sec = new WSSecurityDispatcher();
Username username = new Username(true, false, true);
Config config = new Config();
config.setUsername(username);