dims 2003/01/16 15:47:29
Modified: java/src/org/apache/axis AxisFault.java Constants.java
java/src/org/apache/axis/encoding
DeserializationContextImpl.java
java/src/org/apache/axis/i18n resource.properties
java/src/org/apache/axis/message BodyBuilder.java
EnvelopeBuilder.java HeaderBuilder.java
MessageElement.java RPCElement.java
SOAPFaultBuilder.java SOAPFaultDetailsBuilder.java
SOAPHandler.java
java/src/org/apache/axis/providers/java JavaProvider.java
java/test/soap12 PackageTests.java TestHrefs.java
Added: java/test/soap12 TestEncodingStyle.java
Log:
SOAP 1.2 Fixes from Andras (He still does not have sufficient Karma :-)
Revision Changes Path
1.68 +5 -1 xml-axis/java/src/org/apache/axis/AxisFault.java
Index: AxisFault.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/AxisFault.java,v
retrieving revision 1.67
retrieving revision 1.68
diff -u -r1.67 -r1.68
--- AxisFault.java 15 Jan 2003 23:30:40 -0000 1.67
+++ AxisFault.java 16 Jan 2003 23:47:27 -0000 1.68
@@ -661,7 +661,11 @@
*/
public void output(SerializationContext context) throws Exception {
- SOAPEnvelope envelope = new SOAPEnvelope();
+ SOAPConstants soapConstants = Constants.DEFAULT_SOAP_VERSION;
+ if (context.getMessageContext() != null)
+ soapConstants = context.getMessageContext().getSOAPConstants();
+
+ SOAPEnvelope envelope = new SOAPEnvelope(soapConstants);
SOAPFault fault = new SOAPFault(this);
envelope.addBodyElement(fault);
1.108 +1 -1 xml-axis/java/src/org/apache/axis/Constants.java
Index: Constants.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/Constants.java,v
retrieving revision 1.107
retrieving revision 1.108
diff -u -r1.107 -r1.108
--- Constants.java 10 Jan 2003 16:35:27 -0000 1.107
+++ Constants.java 16 Jan 2003 23:47:27 -0000 1.108
@@ -492,7 +492,7 @@
public static final QName FAULT_SOAP12_VERSIONMISMATCH =
new QName(URI_SOAP12_ENV, "VersionMismatch");
- public static final QName FAULT_SOAP12_DATAENCODINGUNKNOW =
+ public static final QName FAULT_SOAP12_DATAENCODINGUNKNOWN =
new QName(URI_SOAP12_ENV, "DataEncodingUnknow");
public static final QName FAULT_SOAP12_SENDER =
1.73 +15 -3
xml-axis/java/src/org/apache/axis/encoding/DeserializationContextImpl.java
Index: DeserializationContextImpl.java
===================================================================
RCS file:
/home/cvs/xml-axis/java/src/org/apache/axis/encoding/DeserializationContextImpl.java,v
retrieving revision 1.72
retrieving revision 1.73
diff -u -r1.72 -r1.73
--- DeserializationContextImpl.java 11 Dec 2002 23:25:15 -0000 1.72
+++ DeserializationContextImpl.java 16 Jan 2003 23:47:28 -0000 1.73
@@ -184,11 +184,9 @@
* returns the soap constants.
*/
private SOAPConstants getSOAPConstants(){
- SOAPConstants constants = null;
+ SOAPConstants constants = Constants.DEFAULT_SOAP_VERSION;
if(msgContext != null)
constants = msgContext.getSOAPConstants();
- if(constants == null)
- constants = SOAPConstants.SOAP11_CONSTANTS;
return constants;
}
@@ -895,6 +893,20 @@
attributes = NullAttributes.singleton;
} else {
attributes = new AttributesImpl(attributes);
+
+ SOAPConstants soapConstants = getSOAPConstants();
+ if (soapConstants == SOAPConstants.SOAP12_CONSTANTS) {
+ if (attributes.getValue(soapConstants.getAttrHref()) != null &&
+ attributes.getValue(Constants.ATTR_ID) != null) {
+
+ AxisFault fault = new AxisFault(Constants.FAULT_SOAP12_SENDER,
+ null, Messages.getMessage("noIDandHREFonSameElement"),
null, null, null);
+
+ throw new SAXException(fault);
+
+ }
+ }
+
}
SOAPHandler nextHandler = null;
1.47 +3 -0 xml-axis/java/src/org/apache/axis/i18n/resource.properties
Index: resource.properties
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/i18n/resource.properties,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -r1.46 -r1.47
--- resource.properties 15 Jan 2003 14:06:09 -0000 1.46
+++ resource.properties 16 Jan 2003 23:47:28 -0000 1.47
@@ -996,6 +996,9 @@
onlyOneBodyFor12=Only one body allowed for SOAP 1.2 RPC
noElemAfterBody12=No element allowed after SOAP 1.2 body
+noEncodingStyleAttrAppear=encodigstyle attribute must not appear in element {0} in
SOAP 1.2
+noIDandHREFonSameElement=A ref attribute information item and an id attribute
information item MUST NOT appear on the same element information item in SOAP 1.2
+invalidEncodingStyle=Encoding style is invalid
noSparseArray=Partially transmitted and sparse arrays is not supported in SOAP 1.2
differentTypes00=Error: The input and output parameter have the same name, ''{0}'',
but are defined with type ''{1}'' and also with type ''{2}''.
1.55 +23 -1 xml-axis/java/src/org/apache/axis/message/BodyBuilder.java
Index: BodyBuilder.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/message/BodyBuilder.java,v
retrieving revision 1.54
retrieving revision 1.55
diff -u -r1.54 -r1.55
--- BodyBuilder.java 11 Dec 2002 22:38:20 -0000 1.54
+++ BodyBuilder.java 16 Jan 2003 23:47:28 -0000 1.55
@@ -60,6 +60,7 @@
* @author Glen Daniels ([EMAIL PROTECTED])
*/
+import org.apache.axis.AxisFault;
import org.apache.axis.Constants;
import org.apache.axis.MessageContext;
import org.apache.axis.components.logger.LogFactory;
@@ -93,12 +94,33 @@
DeserializationContext context)
throws SAXException
{
- super.startElement(namespace, localName, prefix, attributes, context);
+ SOAPConstants soapConstants = Constants.DEFAULT_SOAP_VERSION;
+ if (context.getMessageContext() != null)
+ soapConstants = context.getMessageContext().getSOAPConstants();
+
+ if (soapConstants == SOAPConstants.SOAP12_CONSTANTS &&
+ attributes.getValue(Constants.URI_SOAP12_ENV,
Constants.ATTR_ENCODING_STYLE) != null) {
+
+ AxisFault fault = new AxisFault(Constants.FAULT_SOAP12_SENDER,
+ null, Messages.getMessage("noEncodingStyleAttrAppear", "Body"),
null, null, null);
+
+ throw new SAXException(fault);
+ }
+
+ // make a new body element
if (!context.isDoneParsing()) {
+ if (!context.isProcessingRef()) {
+ if (myElement == null) {
+ myElement = new SOAPBody(namespace, localName, prefix,
+ attributes, context,
envelope.getSOAPConstants());
+ }
+ context.pushNewElement(myElement);
+ }
envelope.setBody((SOAPBody)myElement);
}
}
+ // FIX: do we need this method ?
public MessageElement makeNewElement(String namespace, String localName,
String prefix, Attributes attributes,
DeserializationContext context) {
1.32 +9 -0 xml-axis/java/src/org/apache/axis/message/EnvelopeBuilder.java
Index: EnvelopeBuilder.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/message/EnvelopeBuilder.java,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -r1.31 -r1.32
--- EnvelopeBuilder.java 7 Jan 2003 19:41:58 -0000 1.31
+++ EnvelopeBuilder.java 16 Jan 2003 23:47:28 -0000 1.32
@@ -147,6 +147,15 @@
if(context.getMessageContext() != null)
context.getMessageContext().setSOAPConstants(soapConstants);
+ if (soapConstants == SOAPConstants.SOAP12_CONSTANTS &&
+ attributes.getValue(Constants.URI_SOAP12_ENV,
Constants.ATTR_ENCODING_STYLE) != null) {
+
+ AxisFault fault = new AxisFault(Constants.FAULT_SOAP12_SENDER,
+ null, Messages.getMessage("noEncodingStyleAttrAppear", "Envelope"),
null, null, null);
+
+ throw new SAXException(fault);
+ }
+
envelope.setPrefix(prefix);
envelope.setNamespaceURI(namespace);
envelope.setNSMappings(context.getCurrentNSMappings());
1.22 +17 -0 xml-axis/java/src/org/apache/axis/message/HeaderBuilder.java
Index: HeaderBuilder.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/message/HeaderBuilder.java,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -r1.21 -r1.22
--- HeaderBuilder.java 11 Dec 2002 22:38:20 -0000 1.21
+++ HeaderBuilder.java 16 Jan 2003 23:47:28 -0000 1.22
@@ -62,6 +62,10 @@
import org.apache.axis.components.logger.LogFactory;
import org.apache.axis.encoding.DeserializationContext;
+import org.apache.axis.Constants;
+import org.apache.axis.utils.Messages;
+import org.apache.axis.AxisFault;
+import org.apache.axis.soap.SOAPConstants;
import org.apache.commons.logging.Log;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
@@ -84,6 +88,19 @@
DeserializationContext context)
throws SAXException
{
+ SOAPConstants soapConstants = Constants.DEFAULT_SOAP_VERSION;
+ if (context.getMessageContext() != null)
+ soapConstants = context.getMessageContext().getSOAPConstants();
+
+ if (soapConstants == SOAPConstants.SOAP12_CONSTANTS &&
+ attributes.getValue(Constants.URI_SOAP12_ENV,
Constants.ATTR_ENCODING_STYLE) != null) {
+
+ AxisFault fault = new AxisFault(Constants.FAULT_SOAP12_SENDER,
+ null, Messages.getMessage("noEncodingStyleAttrAppear", "Header"),
null, null, null);
+
+ throw new SAXException(fault);
+ }
+
if (!context.isDoneParsing()) {
if (myElement == null) {
myElement = new SOAPHeader(namespace, localName, prefix,
1.142 +5 -3 xml-axis/java/src/org/apache/axis/message/MessageElement.java
Index: MessageElement.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/message/MessageElement.java,v
retrieving revision 1.141
retrieving revision 1.142
diff -u -r1.141 -r1.142
--- MessageElement.java 10 Jan 2003 02:19:57 -0000 1.141
+++ MessageElement.java 16 Jan 2003 23:47:28 -0000 1.142
@@ -254,6 +254,11 @@
encodingStyle =
attributes.getValue(sc.getEncodingURI(),
Constants.ATTR_ENCODING_STYLE);
+
+ // if no-encoding style was defined, we don't define as well
+ if (Constants.URI_SOAP12_NOENC.equals(encodingStyle))
+ encodingStyle = null;
+
}
}
@@ -378,9 +383,6 @@
if (encodingStyle == null) {
encodingStyle = "";
}
-
- if(!encodingStyle.equals("") && !Constants.isSOAP_ENC(encodingStyle))
- throw new
IllegalArgumentException(Messages.getMessage("illegalArgumentException01",encodingStyle));
this.encodingStyle = encodingStyle;
1.81 +11 -2 xml-axis/java/src/org/apache/axis/message/RPCElement.java
Index: RPCElement.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/message/RPCElement.java,v
retrieving revision 1.80
retrieving revision 1.81
diff -u -r1.80 -r1.81
--- RPCElement.java 11 Dec 2002 22:38:20 -0000 1.80
+++ RPCElement.java 16 Jan 2003 23:47:28 -0000 1.81
@@ -56,6 +56,7 @@
package org.apache.axis.message;
import org.apache.axis.AxisFault;
+import org.apache.axis.Constants;
import org.apache.axis.Message;
import org.apache.axis.MessageContext;
import org.apache.axis.description.OperationDesc;
@@ -68,6 +69,7 @@
import org.apache.axis.handlers.soap.SOAPService;
import org.apache.axis.utils.JavaUtils;
import org.apache.axis.utils.Messages;
+import org.apache.axis.soap.SOAPConstants;
import org.apache.axis.wsdl.toJava.Utils;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
@@ -158,6 +160,8 @@
// Figure out if we should be looking for out params or in params
// (i.e. is this message a response?)
Message msg = msgContext.getCurrentMessage();
+ SOAPConstants soapConstants = msgContext.getSOAPConstants();
+
boolean isResponse = ((msg != null) &&
Message.RESPONSE.equals(msg.getMessageType()));
@@ -275,8 +279,13 @@
if (savedException != null) {
throw savedException;
} else if (!msgContext.isClient()) {
- throw new SAXException(
- Messages.getMessage("noSuchOperation", name));
+ QName faultCode = new QName(Constants.FAULT_SERVER_USER);
+ if (soapConstants == SOAPConstants.SOAP12_CONSTANTS)
+ faultCode = Constants.FAULT_SOAP12_SENDER;
+ AxisFault fault = new AxisFault(faultCode,
+ null, Messages.getMessage("noSuchOperation", name), null, null,
null);
+
+ throw new SAXException(fault);
}
}
1.27 +22 -0 xml-axis/java/src/org/apache/axis/message/SOAPFaultBuilder.java
Index: SOAPFaultBuilder.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/message/SOAPFaultBuilder.java,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -r1.26 -r1.27
--- SOAPFaultBuilder.java 11 Dec 2002 22:38:20 -0000 1.26
+++ SOAPFaultBuilder.java 16 Jan 2003 23:47:28 -0000 1.27
@@ -61,6 +61,7 @@
import org.apache.axis.encoding.DeserializationContext;
import org.apache.axis.encoding.Deserializer;
import org.apache.axis.soap.SOAPConstants;
+import org.apache.axis.utils.Messages;
import org.w3c.dom.Element;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
@@ -121,6 +122,27 @@
this.context = context;
}
+ public void startElement(String namespace, String localName,
+ String prefix, Attributes attributes,
+ DeserializationContext context)
+ throws SAXException
+ {
+ SOAPConstants soapConstants = Constants.DEFAULT_SOAP_VERSION;
+ if (context.getMessageContext() != null)
+ soapConstants = context.getMessageContext().getSOAPConstants();
+
+ if (soapConstants == SOAPConstants.SOAP12_CONSTANTS &&
+ attributes.getValue(Constants.URI_SOAP12_ENV,
Constants.ATTR_ENCODING_STYLE) != null) {
+
+ AxisFault fault = new AxisFault(Constants.FAULT_SOAP12_SENDER,
+ null, Messages.getMessage("noEncodingStyleAttrAppear", "Fault"),
null, null, null);
+
+ throw new SAXException(fault);
+ }
+
+ super.startElement(namespace, localName, prefix, attributes, context);
+ }
+
void setFaultData(Object data) {
faultData = data;
if (waiting && passedEnd) {
1.8 +24 -0
xml-axis/java/src/org/apache/axis/message/SOAPFaultDetailsBuilder.java
Index: SOAPFaultDetailsBuilder.java
===================================================================
RCS file:
/home/cvs/xml-axis/java/src/org/apache/axis/message/SOAPFaultDetailsBuilder.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- SOAPFaultDetailsBuilder.java 20 Dec 2002 17:28:22 -0000 1.7
+++ SOAPFaultDetailsBuilder.java 16 Jan 2003 23:47:28 -0000 1.8
@@ -54,6 +54,7 @@
*/
package org.apache.axis.message;
+import org.apache.axis.AxisFault;
import org.apache.axis.Constants;
import org.apache.axis.MessageContext;
import org.apache.axis.description.FaultDesc;
@@ -64,6 +65,7 @@
import org.apache.axis.encoding.Deserializer;
import org.apache.axis.encoding.DeserializerImpl;
import org.apache.axis.utils.ClassUtils;
+import org.apache.axis.utils.Messages;
import org.apache.axis.soap.SOAPConstants;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
@@ -82,6 +84,28 @@
public SOAPFaultDetailsBuilder(SOAPFaultBuilder builder) {
this.builder = builder;
+ }
+
+
+ public void startElement(String namespace, String localName,
+ String prefix, Attributes attributes,
+ DeserializationContext context)
+ throws SAXException
+ {
+ SOAPConstants soapConstants = Constants.DEFAULT_SOAP_VERSION;
+ if (context.getMessageContext() != null)
+ soapConstants = context.getMessageContext().getSOAPConstants();
+
+ if (soapConstants == SOAPConstants.SOAP12_CONSTANTS &&
+ attributes.getValue(Constants.URI_SOAP12_ENV,
Constants.ATTR_ENCODING_STYLE) != null) {
+
+ AxisFault fault = new AxisFault(Constants.FAULT_SOAP12_SENDER,
+ null, Messages.getMessage("noEncodingStyleAttrAppear", "Detail"),
null, null, null);
+
+ throw new SAXException(fault);
+ }
+
+ super.startElement(namespace, localName, prefix, attributes, context);
}
public SOAPHandler onStartChild(String namespace,
1.12 +29 -0 xml-axis/java/src/org/apache/axis/message/SOAPHandler.java
Index: SOAPHandler.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/message/SOAPHandler.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- SOAPHandler.java 4 Dec 2002 20:06:58 -0000 1.11
+++ SOAPHandler.java 16 Jan 2003 23:47:28 -0000 1.12
@@ -59,7 +59,12 @@
* @author Glen Daniels ([EMAIL PROTECTED])
*/
+import org.apache.axis.AxisFault;
+import org.apache.axis.Constants;
import org.apache.axis.encoding.DeserializationContext;
+import org.apache.axis.encoding.TypeMappingRegistry;
+import org.apache.axis.soap.SOAPConstants;
+import org.apache.axis.utils.Messages;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
@@ -88,6 +93,30 @@
DeserializationContext context)
throws SAXException
{
+ SOAPConstants soapConstants = Constants.DEFAULT_SOAP_VERSION;
+ if (context.getMessageContext() != null)
+ soapConstants = context.getMessageContext().getSOAPConstants();
+
+
+ if (soapConstants == SOAPConstants.SOAP12_CONSTANTS) {
+ String encodingStyle = attributes.getValue(Constants.URI_SOAP12_ENV,
+ Constants.ATTR_ENCODING_STYLE);
+
+ if (encodingStyle != null && !encodingStyle.equals("")
+ && !encodingStyle.equals(Constants.URI_SOAP12_NOENC)
+ && !Constants.isSOAP_ENC(encodingStyle)) {
+ TypeMappingRegistry tmr = context.getTypeMappingRegistry();
+ // TODO: both soap encoding style is registered ?
+ if (tmr.getTypeMapping(encodingStyle) ==
tmr.getDefaultTypeMapping()) {
+ AxisFault fault = new
AxisFault(Constants.FAULT_SOAP12_DATAENCODINGUNKNOWN,
+ null, Messages.getMessage("invalidEncodingStyle"), null,
null, null);
+
+ throw new SAXException(fault);
+ }
+ }
+ }
+
+
// By default, make a new element
if (!context.isDoneParsing() && !context.isProcessingRef()) {
if (myElement == null) {
1.97 +9 -2
xml-axis/java/src/org/apache/axis/providers/java/JavaProvider.java
Index: JavaProvider.java
===================================================================
RCS file:
/home/cvs/xml-axis/java/src/org/apache/axis/providers/java/JavaProvider.java,v
retrieving revision 1.96
retrieving revision 1.97
diff -u -r1.96 -r1.97
--- JavaProvider.java 6 Jan 2003 18:30:07 -0000 1.96
+++ JavaProvider.java 16 Jan 2003 23:47:29 -0000 1.97
@@ -79,6 +79,8 @@
import javax.xml.rpc.holders.IntHolder;
import javax.xml.rpc.server.ServiceLifecycle;
+import org.xml.sax.SAXException;
+
import java.util.ArrayList;
import java.util.StringTokenizer;
@@ -326,8 +328,13 @@
SOAPEnvelope reqEnv = reqMsg.getSOAPEnvelope();
processMessage(msgContext, reqEnv, resEnv, serviceObject);
- }
- catch( Exception exp ) {
+ } catch( SAXException exp ) {
+ entLog.debug( Messages.getMessage("toAxisFault00"), exp);
+ Exception real = exp.getException();
+ if (real == null)
+ real = exp;
+ throw AxisFault.makeFault(real);
+ } catch( Exception exp ) {
entLog.debug( Messages.getMessage("toAxisFault00"), exp);
throw AxisFault.makeFault(exp);
} finally {
1.4 +1 -0 xml-axis/java/test/soap12/PackageTests.java
Index: PackageTests.java
===================================================================
RCS file: /home/cvs/xml-axis/java/test/soap12/PackageTests.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- PackageTests.java 7 Jan 2003 21:29:07 -0000 1.3
+++ PackageTests.java 16 Jan 2003 23:47:29 -0000 1.4
@@ -76,6 +76,7 @@
suite.addTestSuite(TestHrefs.class);
suite.addTestSuite(TestRPC.class);
suite.addTestSuite(TestVersionMismatch.class);
+ suite.addTestSuite(TestEncodingStyle.class);
return suite;
}
}
1.2 +19 -0 xml-axis/java/test/soap12/TestHrefs.java
Index: TestHrefs.java
===================================================================
RCS file: /home/cvs/xml-axis/java/test/soap12/TestHrefs.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- TestHrefs.java 20 Dec 2002 17:28:21 -0000 1.1
+++ TestHrefs.java 16 Jan 2003 23:47:29 -0000 1.2
@@ -1,6 +1,7 @@
package test.soap12;
import junit.framework.TestCase;
+import org.apache.axis.AxisFault;
import org.apache.axis.Constants;
import org.apache.axis.Message;
import org.apache.axis.MessageContext;
@@ -8,6 +9,7 @@
import org.apache.axis.message.RPCParam;
import org.apache.axis.message.SOAPEnvelope;
import org.apache.axis.server.AxisServer;
+import org.apache.axis.utils.Messages;
import java.util.Vector;
@@ -94,5 +96,22 @@
BODYT;
deserialize(result, "abc", 0);
}
+
+ public void testIDANDHREF() throws Exception {
+ String result = HEAD +
+ HEADERT +
+ "<result root=\"0\" ref=\"#1\" id=\"1\"
xsi:type=\"xsd:string\">abc</result>" +
+ BODYT;
+ try {
+ deserialize(result, "abc", 0);
+ } catch (AxisFault af) {
+
assertTrue(af.getFaultString().indexOf(Messages.getMessage("noIDandHREFonSameElement"))
!= -1 &&
+
Constants.FAULT_SOAP12_SENDER.equals(af.getFaultCode()));
+ return;
+ }
+ fail("Didn't got the expected fault");
+
+ }
+
}
1.1 xml-axis/java/test/soap12/TestEncodingStyle.java
Index: TestEncodingStyle.java
===================================================================
/*
* The Apache Software License, Version 1.1
*
*
* Copyright (c) 2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Axis" and "Apache Software Foundation" must
* not be used to endorse or promote products derived from this
* software without prior written permission. For written
* permission, please contact [EMAIL PROTECTED]
*
* 5. Products derived from this software may not be called "Apache",
* nor may "Apache" appear in their name, without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
/**
* @author Andras Avar ([EMAIL PROTECTED])
*/
package test.soap12;
import junit.framework.TestCase;
import org.apache.axis.AxisFault;
import org.apache.axis.Constants;
import org.apache.axis.Message;
import org.apache.axis.MessageContext;
import org.apache.axis.encoding.TypeMapping;
import org.apache.axis.encoding.TypeMappingRegistry;
import org.apache.axis.message.SOAPEnvelope;
import org.apache.axis.server.AxisServer;
import org.apache.axis.soap.SOAPConstants;
import org.apache.axis.utils.Messages;
import javax.xml.namespace.QName;
/**
* Test encodingstyle attribute appearance
*/
public class TestEncodingStyle extends TestCase {
private AxisServer server = null;
public TestEncodingStyle(String name) {
super(name);
server = new AxisServer();
}
private final String ENVELOPE =
"<?xml version=\"1.0\"?>\n" +
"<soap:Envelope " +
"xmlns:soap=\"" + Constants.URI_SOAP12_ENV + "\" " +
"xmlns:xsi=\"" + Constants.URI_DEFAULT_SCHEMA_XSI + "\" " +
"xmlns:xsd=\"" + Constants.URI_DEFAULT_SCHEMA_XSD + "\" ";
private final String HEADER =
">\n" +
"<soap:Header ";
private final String BODY =
"/>\n" +
"<soap:Body ";
private final String FAULT_HEAD =
">\n" +
"<soap:Fault ";
private final String FAULT_DETAIL =
">\n" +
"<soap:Code>" +
"<soap:Value>soap:Sender</soap:Value>" +
"</soap:Code>" +
"<soap:Detail ";
private final String FAULT_TAIL =
">\n" +
"<hello/>" +
"</soap:Detail>" +
"</soap:Fault>";
private final String TAIL =
"</soap:Body>\n" +
"</soap:Envelope>\n";
private final String ENCSTYLE_DEF =
"soap:encodingStyle=\"" + Constants.URI_SOAP12_ENC + "\"";
private final String MESSAGE_HEAD =
">\n" +
"<methodResult xmlns=\"http://tempuri.org/\" ";
private final String MESSAGE =
">\n";
private final String MESSAGE_TAIL =
"</methodResult>\n";
private final String ITEM =
"<item xsi:type=\"xsd:string\">abc</item>\n";
private final String INVALID_ENCSTYLE = "http://invalidencodingstyle.org";
private final String NO_ENCSTYLE = Constants.URI_SOAP12_NOENC;
private final String INVALID_ENCSTYLE_DEF =
"soap:encodingStyle=\"" + INVALID_ENCSTYLE + "\"";
private final String NO_ENCSTYLE_DEF =
"soap:encodingStyle=\"" + NO_ENCSTYLE + "\"";
public boolean deserialize(String req, QName expected_code, String expected_str)
throws Exception {
Message message = new Message(req);
MessageContext context = new MessageContext(server);
context.setSOAPConstants(SOAPConstants.SOAP12_CONSTANTS);
message.setMessageContext(context);
boolean expectedFault = false;
try {
SOAPEnvelope envelope = message.getSOAPEnvelope();
} catch (AxisFault af) {
expectedFault = true;
return af.getFaultString().indexOf(expected_str) != -1 &&
expected_code.equals(af.getFaultCode());
}
return expectedFault;
}
public void testEncStyleInEnvelope() throws Exception {
String req = ENVELOPE + ENCSTYLE_DEF + HEADER + BODY + FAULT_HEAD +
FAULT_DETAIL + FAULT_TAIL + TAIL;
assertTrue(deserialize(req, Constants.FAULT_SOAP12_SENDER,
Messages.getMessage("noEncodingStyleAttrAppear", "Envelope")));
}
public void testEncStyleInHeader() throws Exception {
String req = ENVELOPE + HEADER + ENCSTYLE_DEF + BODY + FAULT_HEAD +
FAULT_DETAIL + FAULT_TAIL + TAIL;
assertTrue(deserialize(req, Constants.FAULT_SOAP12_SENDER,
Messages.getMessage("noEncodingStyleAttrAppear", "Header")));
}
public void testEncStyleInBody() throws Exception {
String req = ENVELOPE + HEADER + BODY + ENCSTYLE_DEF + FAULT_HEAD +
FAULT_DETAIL + FAULT_TAIL + TAIL;
assertTrue(deserialize(req, Constants.FAULT_SOAP12_SENDER,
Messages.getMessage("noEncodingStyleAttrAppear", "Body")));
}
public void testEncStyleInFault() throws Exception {
String req = ENVELOPE + HEADER + BODY + FAULT_HEAD + ENCSTYLE_DEF +
FAULT_DETAIL + FAULT_TAIL + TAIL;
assertTrue(deserialize(req, Constants.FAULT_SOAP12_SENDER,
Messages.getMessage("noEncodingStyleAttrAppear", "Fault")));
}
public void testEncStyleInDetail() throws Exception {
String req = ENVELOPE + HEADER + BODY + FAULT_HEAD + FAULT_DETAIL +
ENCSTYLE_DEF + FAULT_TAIL + TAIL;
assertTrue(deserialize(req, Constants.FAULT_SOAP12_SENDER,
Messages.getMessage("noEncodingStyleAttrAppear", "Detail")));
}
public void testInvalidEncodingStyle() throws Exception {
String req = ENVELOPE + HEADER + BODY + MESSAGE_HEAD + INVALID_ENCSTYLE_DEF
+ MESSAGE + ITEM + MESSAGE_TAIL + TAIL;
assertTrue(deserialize(req, Constants.FAULT_SOAP12_DATAENCODINGUNKNOWN,
Messages.getMessage("invalidEncodingStyle")));
}
public void testAcceptUserEncodingStyle() throws Exception {
String req = ENVELOPE + HEADER + BODY + MESSAGE_HEAD + INVALID_ENCSTYLE_DEF
+ MESSAGE + ITEM + MESSAGE_TAIL + TAIL;
Message message = new Message(req);
MessageContext context = new MessageContext(server);
// Set the "invalid" encoding style
TypeMappingRegistry reg = context.getTypeMappingRegistry();
TypeMapping tm = (TypeMapping) reg.createTypeMapping();
tm.setSupportedEncodings(new String[] { INVALID_ENCSTYLE });
reg.register(INVALID_ENCSTYLE, tm);
context.setSOAPConstants(SOAPConstants.SOAP12_CONSTANTS);
message.setMessageContext(context);
SOAPEnvelope envelope = message.getSOAPEnvelope();
assertTrue(envelope != null);
}
public void testNoEncodingStyle() throws Exception {
String req = ENVELOPE + HEADER + BODY + MESSAGE_HEAD + NO_ENCSTYLE_DEF +
MESSAGE + ITEM + MESSAGE_TAIL + TAIL;
assertTrue(deserialize(req, null, null) == false);
}
}