Added: webservices/rampart/trunk/java/modules/rampart-samples/policy/sample04/policy.xml URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-samples/policy/sample04/policy.xml?view=auto&rev=530721 ============================================================================== --- webservices/rampart/trunk/java/modules/rampart-samples/policy/sample04/policy.xml (added) +++ webservices/rampart/trunk/java/modules/rampart-samples/policy/sample04/policy.xml Fri Apr 20 02:43:13 2007 @@ -0,0 +1,150 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ! + ! Copyright 2006 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. + !--> + +<wsp:Policy wsu:Id="SecConvPolicy2" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"> + <wsp:ExactlyOne> + <wsp:All> + <sp:SymmetricBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy"> + <wsp:Policy> + <sp:ProtectionToken> + <wsp:Policy> + <sp:SecureConversationToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient"> + <wsp:Policy> + <sp:RequireDerivedKeys/> + <sp:BootstrapPolicy> + <wsp:Policy> + <sp:EncryptedParts> + <sp:Body/> + </sp:EncryptedParts> + <sp:SymmetricBinding> + <wsp:Policy> + <sp:ProtectionToken> + <wsp:Policy> + <sp:X509Token sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Never"> + <wsp:Policy> + <sp:RequireDerivedKeys/> + <sp:RequireThumbprintReference/> + <sp:WssX509V3Token10/> + </wsp:Policy> + </sp:X509Token> + </wsp:Policy> + </sp:ProtectionToken> + <sp:AlgorithmSuite> + <wsp:Policy> + <sp:Basic128Rsa15/> + </wsp:Policy> + </sp:AlgorithmSuite> + <sp:Layout> + <wsp:Policy> + <sp:Strict/> + </wsp:Policy> + </sp:Layout> + <sp:IncludeTimestamp/> + <sp:EncryptSignature/> + <sp:OnlySignEntireHeadersAndBody/> + </wsp:Policy> + </sp:SymmetricBinding> + <sp:EndorsingSupportingTokens> + <wsp:Policy> + <sp:X509Token sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient"> + <wsp:Policy> + <sp:RequireThumbprintReference/> + <sp:WssX509V3Token10/> + </wsp:Policy> + </sp:X509Token> + </wsp:Policy> + </sp:EndorsingSupportingTokens> + <sp:Wss11> + <wsp:Policy> + <sp:MustSupportRefKeyIdentifier/> + <sp:MustSupportRefIssuerSerial/> + <sp:MustSupportRefThumbprint/> + <sp:MustSupportRefEncryptedKey/> + <sp:RequireSignatureConfirmation/> + </wsp:Policy> + </sp:Wss11> + <sp:Trust10> + <wsp:Policy> + <sp:MustSupportIssuedTokens/> + <sp:RequireClientEntropy/> + <sp:RequireServerEntropy/> + </wsp:Policy> + </sp:Trust10> + </wsp:Policy> + </sp:BootstrapPolicy> + </wsp:Policy> + </sp:SecureConversationToken> + </wsp:Policy> + </sp:ProtectionToken> + <sp:AlgorithmSuite> + <wsp:Policy> + <sp:Basic128Rsa15/> + </wsp:Policy> + </sp:AlgorithmSuite> + <sp:Layout> + <wsp:Policy> + <sp:Strict/> + </wsp:Policy> + </sp:Layout> + <sp:IncludeTimestamp/> + <sp:EncryptSignature/> + <sp:OnlySignEntireHeadersAndBody/> + </wsp:Policy> + </sp:SymmetricBinding> + <sp:Wss11 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy"> + <wsp:Policy> + <sp:MustSupportRefKeyIdentifier/> + <sp:MustSupportRefIssuerSerial/> + <sp:MustSupportRefThumbprint/> + <sp:MustSupportRefEncryptedKey/> + </wsp:Policy> + </sp:Wss11> + <sp:Trust10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy"> + <wsp:Policy> + <sp:MustSupportIssuedTokens/> + <sp:RequireClientEntropy/> + <sp:RequireServerEntropy/> + </wsp:Policy> + </sp:Trust10> + <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy"> + <sp:Body/> + </sp:EncryptedParts> + <ramp:RampartConfig xmlns:ramp="http://ws.apache.org/rampart/policy"> + <ramp:user>client</ramp:user> + <ramp:encryptionUser>service</ramp:encryptionUser> + <ramp:passwordCallbackClass>org.apache.rampart.samples.policy.sample04.PWCBHandler</ramp:passwordCallbackClass> + + <ramp:signatureCrypto> + <ramp:crypto provider="org.apache.ws.security.components.crypto.Merlin"> + <ramp:property name="org.apache.ws.security.crypto.merlin.keystore.type">JKS</ramp:property> + <ramp:property name="org.apache.ws.security.crypto.merlin.file">client.jks</ramp:property> + <ramp:property name="org.apache.ws.security.crypto.merlin.keystore.password">apache</ramp:property> + </ramp:crypto> + </ramp:signatureCrypto> + <ramp:encryptionCypto> + <ramp:crypto provider="org.apache.ws.security.components.crypto.Merlin"> + <ramp:property name="org.apache.ws.security.crypto.merlin.keystore.type">JKS</ramp:property> + <ramp:property name="org.apache.ws.security.crypto.merlin.file">client.jks</ramp:property> + <ramp:property name="org.apache.ws.security.crypto.merlin.keystore.password">apache</ramp:property> + </ramp:crypto> + </ramp:encryptionCypto> + + </ramp:RampartConfig> + </wsp:All> + </wsp:ExactlyOne> +</wsp:Policy> \ No newline at end of file
Added: webservices/rampart/trunk/java/modules/rampart-samples/policy/sample04/services.xml URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-samples/policy/sample04/services.xml?view=auto&rev=530721 ============================================================================== --- webservices/rampart/trunk/java/modules/rampart-samples/policy/sample04/services.xml (added) +++ webservices/rampart/trunk/java/modules/rampart-samples/policy/sample04/services.xml Fri Apr 20 02:43:13 2007 @@ -0,0 +1,198 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ! + ! Copyright 2006 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. + !--> +<!-- services.xml of sample-2 : Sign only--> +<service> + <operation name="echo"> + <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/> + </operation> + <parameter name="ServiceClass" locked="false">org.apache.rampart.samples.policy.sample04.SimpleService</parameter> + + <module ref="rampart" /> + <module ref="rahas" /> + <module ref="addressing" /> + + <wsp:Policy wsu:Id="SecConvPolicy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"> + <wsp:ExactlyOne> + <wsp:All> + <sp:SymmetricBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy"> + <wsp:Policy> + <sp:ProtectionToken> + <wsp:Policy> + <sp:SecureConversationToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient"> + <wsp:Policy> + <sp:RequireDerivedKeys/> + <sp:BootstrapPolicy> + <wsp:Policy> + <sp:EncryptedParts> + <sp:Body/> + </sp:EncryptedParts> + <sp:SymmetricBinding> + <wsp:Policy> + <sp:ProtectionToken> + <wsp:Policy> + <sp:X509Token sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/Never"> + <wsp:Policy> + <sp:RequireDerivedKeys/> + <sp:RequireThumbprintReference/> + <sp:WssX509V3Token10/> + </wsp:Policy> + </sp:X509Token> + </wsp:Policy> + </sp:ProtectionToken> + <sp:AlgorithmSuite> + <wsp:Policy> + <sp:Basic128Rsa15/> + </wsp:Policy> + </sp:AlgorithmSuite> + <sp:Layout> + <wsp:Policy> + <sp:Strict/> + </wsp:Policy> + </sp:Layout> + <sp:IncludeTimestamp/> + <sp:EncryptSignature/> + <sp:OnlySignEntireHeadersAndBody/> + </wsp:Policy> + </sp:SymmetricBinding> + <sp:EndorsingSupportingTokens> + <wsp:Policy> + <sp:X509Token sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient"> + <wsp:Policy> + <sp:RequireThumbprintReference/> + <sp:WssX509V3Token10/> + </wsp:Policy> + </sp:X509Token> + </wsp:Policy> + </sp:EndorsingSupportingTokens> + <sp:Wss11> + <wsp:Policy> + <sp:MustSupportRefKeyIdentifier/> + <sp:MustSupportRefIssuerSerial/> + <sp:MustSupportRefThumbprint/> + <sp:MustSupportRefEncryptedKey/> + <sp:RequireSignatureConfirmation/> + </wsp:Policy> + </sp:Wss11> + <sp:Trust10> + <wsp:Policy> + <sp:MustSupportIssuedTokens/> + <sp:RequireClientEntropy/> + <sp:RequireServerEntropy/> + </wsp:Policy> + </sp:Trust10> + </wsp:Policy> + </sp:BootstrapPolicy> + </wsp:Policy> + </sp:SecureConversationToken> + </wsp:Policy> + </sp:ProtectionToken> + <sp:AlgorithmSuite> + <wsp:Policy> + <sp:Basic128Rsa15/> + </wsp:Policy> + </sp:AlgorithmSuite> + <sp:Layout> + <wsp:Policy> + <sp:Strict/> + </wsp:Policy> + </sp:Layout> + <sp:IncludeTimestamp/> + <sp:EncryptSignature/> + <sp:OnlySignEntireHeadersAndBody/> + </wsp:Policy> + </sp:SymmetricBinding> + <sp:Wss11 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy"> + <wsp:Policy> + <sp:MustSupportRefKeyIdentifier/> + <sp:MustSupportRefIssuerSerial/> + <sp:MustSupportRefThumbprint/> + <sp:MustSupportRefEncryptedKey/> + </wsp:Policy> + </sp:Wss11> + <sp:Trust10 xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy"> + <wsp:Policy> + <sp:MustSupportIssuedTokens/> + <sp:RequireClientEntropy/> + <sp:RequireServerEntropy/> + </wsp:Policy> + </sp:Trust10> + <sp:EncryptedParts xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy"> + <sp:Body/> + </sp:EncryptedParts> + <ramp:RampartConfig xmlns:ramp="http://ws.apache.org/rampart/policy"> + <ramp:user>service</ramp:user> + <ramp:encryptionUser>client</ramp:encryptionUser> + <ramp:passwordCallbackClass>org.apache.rampart.samples.policy.sample04.PWCBHandler</ramp:passwordCallbackClass> + + <ramp:signatureCrypto> + <ramp:crypto provider="org.apache.ws.security.components.crypto.Merlin"> + <ramp:property name="org.apache.ws.security.crypto.merlin.keystore.type">JKS</ramp:property> + <ramp:property name="org.apache.ws.security.crypto.merlin.file">service.jks</ramp:property> + <ramp:property name="org.apache.ws.security.crypto.merlin.keystore.password">apache</ramp:property> + </ramp:crypto> + </ramp:signatureCrypto> + <ramp:encryptionCypto> + <ramp:crypto provider="org.apache.ws.security.components.crypto.Merlin"> + <ramp:property name="org.apache.ws.security.crypto.merlin.keystore.type">JKS</ramp:property> + <ramp:property name="org.apache.ws.security.crypto.merlin.file">service.jks</ramp:property> + <ramp:property name="org.apache.ws.security.crypto.merlin.keystore.password">apache</ramp:property> + </ramp:crypto> + </ramp:encryptionCypto> + + </ramp:RampartConfig> + </wsp:All> + </wsp:ExactlyOne> + </wsp:Policy> + + <parameter name="sct-issuer-config"> + <sct-issuer-config> + <cryptoProperties> + <crypto provider="org.apache.ws.security.components.crypto.Merlin"> + <property name="org.apache.ws.security.crypto.merlin.keystore.type">JKS</property> + <property name="org.apache.ws.security.crypto.merlin.file">sts.jks</property> + <property name="org.apache.ws.security.crypto.merlin.keystore.password">password</property> + </crypto> + </cryptoProperties> + <addRequestedAttachedRef /> + <addRequestedUnattachedRef /> + + <!-- + Key computation mechanism + 1 - Use Request Entropy + 2 - Provide Entropy + 3 - Use Own Key + --> + <keyComputation>3</keyComputation> + + <!-- + proofKeyType element is valid only if the keyComputation is set to 3 + i.e. Use Own Key + + Valid values are: EncryptedKey & BinarySecret + --> + <proofKeyType>BinarySecret</proofKeyType> + </sct-issuer-config> + </parameter> + + <parameter name="token-canceler-config"> + <token-canceler-config> + + </token-canceler-config> + </parameter> + +</service> Added: webservices/rampart/trunk/java/modules/rampart-samples/policy/sample04/src/org/apache/rampart/samples/policy/sample04/Client.java URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-samples/policy/sample04/src/org/apache/rampart/samples/policy/sample04/Client.java?view=auto&rev=530721 ============================================================================== --- webservices/rampart/trunk/java/modules/rampart-samples/policy/sample04/src/org/apache/rampart/samples/policy/sample04/Client.java (added) +++ webservices/rampart/trunk/java/modules/rampart-samples/policy/sample04/src/org/apache/rampart/samples/policy/sample04/Client.java Fri Apr 20 02:43:13 2007 @@ -0,0 +1,85 @@ +/* + * Copyright 2004,2005 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.rampart.samples.policy.sample04; + +import org.apache.axiom.om.OMAbstractFactory; +import org.apache.axiom.om.OMElement; +import org.apache.axiom.om.OMFactory; +import org.apache.axiom.om.OMNamespace; +import org.apache.axiom.om.impl.builder.StAXOMBuilder; +import org.apache.axis2.Constants; +import org.apache.axis2.addressing.EndpointReference; +import org.apache.axis2.client.Options; +import org.apache.axis2.client.ServiceClient; +import org.apache.axis2.context.ConfigurationContext; +import org.apache.axis2.context.ConfigurationContextFactory; +import org.apache.neethi.Policy; +import org.apache.neethi.PolicyEngine; +import org.apache.rampart.RampartMessageData; + +import javax.xml.namespace.QName; + +public class Client { + + public static void main(String[] args) throws Exception { + + if(args.length != 3) { + System.out.println("Usage: $java Client endpoint_address client_repo_path policy_xml_path"); + } + + ConfigurationContext ctx = ConfigurationContextFactory.createConfigurationContextFromFileSystem(args[1], null); + + ServiceClient client = new ServiceClient(ctx, null); + Options options = new Options(); + options.setAction("urn:echo"); + options.setTo(new EndpointReference(args[0])); + options.setProperty(RampartMessageData.KEY_RAMPART_POLICY, loadPolicy(args[2])); + client.setOptions(options); + + client.engageModule("addressing"); + client.engageModule("rampart"); + + OMElement response = client.sendReceive(getPayload("Hello world1")); + System.out.println("Response 1 : " + response); + response = client.sendReceive(getPayload("Hello world2")); + System.out.println("Response 2 : " + response); + response = client.sendReceive(getPayload("Hello world3")); + System.out.println("Response 3 : " + response); + + System.out.println("Sending cancel request"); + options.setProperty(RampartMessageData.CANCEL_REQUEST, Constants.VALUE_TRUE); + response = client.sendReceive(getPayload("Hello world3")); + System.out.println("Cancel response: " + response); + } + + private static Policy loadPolicy(String xmlPath) throws Exception { + StAXOMBuilder builder = new StAXOMBuilder(xmlPath); + return PolicyEngine.getPolicy(builder.getDocumentElement()); + } + + private static OMElement getPayload(String value) { + OMFactory factory = OMAbstractFactory.getOMFactory(); + OMNamespace ns = factory.createOMNamespace("http://sample04.policy.samples.rampart.apache.org/xsd","ns1"); + OMElement elem = factory.createOMElement("echo", ns); + OMElement childElem = factory.createOMElement("param0", null); + childElem.setText(value); + elem.addChild(childElem); + + return elem; + } + +} Added: webservices/rampart/trunk/java/modules/rampart-samples/policy/sample04/src/org/apache/rampart/samples/policy/sample04/PWCBHandler.java URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-samples/policy/sample04/src/org/apache/rampart/samples/policy/sample04/PWCBHandler.java?view=auto&rev=530721 ============================================================================== --- webservices/rampart/trunk/java/modules/rampart-samples/policy/sample04/src/org/apache/rampart/samples/policy/sample04/PWCBHandler.java (added) +++ webservices/rampart/trunk/java/modules/rampart-samples/policy/sample04/src/org/apache/rampart/samples/policy/sample04/PWCBHandler.java Fri Apr 20 02:43:13 2007 @@ -0,0 +1,42 @@ +/* + * Copyright 2004,2005 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.rampart.samples.policy.sample04; + +import org.apache.ws.security.WSPasswordCallback; + +import javax.security.auth.callback.Callback; +import javax.security.auth.callback.CallbackHandler; +import javax.security.auth.callback.UnsupportedCallbackException; + +import java.io.IOException; + +public class PWCBHandler implements CallbackHandler { + + public void handle(Callback[] callbacks) throws IOException, + UnsupportedCallbackException { + for (int i = 0; i < callbacks.length; i++) { + WSPasswordCallback pwcb = (WSPasswordCallback)callbacks[i]; + String id = pwcb.getIdentifer(); + if("client".equals(id)) { + pwcb.setPassword("apache"); + } else if("service".equals(id)) { + pwcb.setPassword("apache"); + } + } + } + +} Added: webservices/rampart/trunk/java/modules/rampart-samples/policy/sample04/src/org/apache/rampart/samples/policy/sample04/SimpleService.java URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/java/modules/rampart-samples/policy/sample04/src/org/apache/rampart/samples/policy/sample04/SimpleService.java?view=auto&rev=530721 ============================================================================== --- webservices/rampart/trunk/java/modules/rampart-samples/policy/sample04/src/org/apache/rampart/samples/policy/sample04/SimpleService.java (added) +++ webservices/rampart/trunk/java/modules/rampart-samples/policy/sample04/src/org/apache/rampart/samples/policy/sample04/SimpleService.java Fri Apr 20 02:43:13 2007 @@ -0,0 +1,24 @@ +/* + * Copyright 2003-2005 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.rampart.samples.policy.sample04; + +public class SimpleService { + + public String echo(String arg) { + return arg; + } +} Modified: webservices/rampart/trunk/java/pom.xml URL: http://svn.apache.org/viewvc/webservices/rampart/trunk/java/pom.xml?view=diff&rev=530721&r1=530720&r2=530721 ============================================================================== --- webservices/rampart/trunk/java/pom.xml (original) +++ webservices/rampart/trunk/java/pom.xml Fri Apr 20 02:43:13 2007 @@ -172,6 +172,7 @@ <groupId>org.apache.axis2</groupId> <artifactId>axis2-mtompolicy</artifactId> <version>${axis2.version}</version> + <scope>compile</scope> </dependency> <!-- AIOM Dependencies --> @@ -348,6 +349,7 @@ <artifactId>addressing</artifactId> <type>mar</type> <version>${addressing.mar.version}</version> + <scope>compile</scope> </dependency> <dependency> <groupId>commons-fileupload</groupId> @@ -400,10 +402,10 @@ </modules> <properties> - <axis2.version>SNAPSHOT</axis2.version> + <axis2.version>1.2-SNAPSHOT</axis2.version> <axiom.version>SNAPSHOT</axiom.version> - <addressing.mar.version>SNAPSHOT</addressing.mar.version> + <addressing.mar.version>1.2-SNAPSHOT</addressing.mar.version> <wss4j.version>SNAPSHOT</wss4j.version> <xmlsec.version>1.4.0</xmlsec.version> @@ -411,7 +413,7 @@ <opensaml.version>1.1</opensaml.version> <XmlSchema.version>SNAPSHOT</XmlSchema.version> - <neethi.version>2.0</neethi.version> + <neethi.version>SNAPSHOT</neethi.version> <xbean.version>2.1.0</xbean.version> <woden.version>1.0-incubating-SNAPSHOT</woden.version> @@ -443,7 +445,7 @@ <xmlunit.version>1.0</xmlunit.version> <log4j.version>1.2.13</log4j.version> - <jakarta.httpcore.version>4.0-alpha3</jakarta.httpcore.version> + <jakarta.httpcore.version>4.0-alpha4</jakarta.httpcore.version> <commons.collections.version>3.1</commons.collections.version> <commons.fileupload.version>1.1.1</commons.fileupload.version> <commons.discovery.version>0.2</commons.discovery.version>
