View Javadoc

    1   /*
    2    *  soapUI, copyright (C) 2004-2007 eviware.com
    3    *
    4    *  soapUI is free software; you can redistribute it and/or modify it under the
    5    *  terms of version 2.1 of the GNU Lesser General Public License as published by
    6    *  the Free Software Foundation.
    7    *
    8    *  soapUI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
    9    *  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    10   *  See the GNU Lesser General Public License for more details at gnu.org.
    11   */
    12
    13  package com.eviware.soapui.impl.wsdl.support.soap;
    14
    15  import java.io.IOException;
    16
    17  import javax.xml.namespace.QName;
    18
    19  import org.apache.xmlbeans.SchemaType;
    20  import org.apache.xmlbeans.SchemaTypeLoader;
    21  import org.apache.xmlbeans.XmlBeans;
    22  import org.apache.xmlbeans.XmlException;
    23  import org.apache.xmlbeans.XmlObject;
    24  import org.apache.xmlbeans.XmlOptions;
    25  import org.xmlsoap.schemas.soap.envelope.EnvelopeDocument;
    26
    27  import com.eviware.soapui.SoapUI;
    28  import com.eviware.soapui.impl.wsdl.support.Constants;
    29
    30  /***
    31   * SoapVersion for SOAP 1.1
    32   *
    33   * @author ole.matzura
    34   */
    35
    36  public class SoapVersion11 extends AbstractSoapVersion
    37  {
    38     private final static QName envelopeQName  = new QName(Constants.SOAP11_ENVELOPE_NS, "Envelope");
    39     private final static QName bodyQName = new QName(Constants.SOAP11_ENVELOPE_NS, "Body");
    40     private final static QName faultQName = new QName(Constants.SOAP11_ENVELOPE_NS, "Fault");
    41     private final static QName headerQName = new QName(Constants.SOAP11_ENVELOPE_NS, "Header");
    42
    43     SchemaTypeLoader soapSchema;
    44  	SchemaType soapEnvelopeType;
    45  	private XmlObject soapSchemaXml;
    46  	private XmlObject soapEncodingXml;
    47  	private SchemaType soapFaultType;
    48
    49  	public final static SoapVersion11 instance = new SoapVersion11();
    50
    51     private SoapVersion11()
    52     {
    53     	ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
    54     	Thread.currentThread().setContextClassLoader( SoapUI.class.getClassLoader() );
    55
    56     	try
    57     	{
    58     		XmlOptions options = new XmlOptions();
    59           options.setCompileNoValidation();
    60           options.setCompileNoPvrRule();
    61           options.setCompileDownloadUrls();
    62           options.setCompileNoUpaRule();
    63           options.setValidateTreatLaxAsSkip();
    64
    65  	   	soapSchemaXml = XmlObject.Factory.parse(SoapUI.class.getResource("/soapEnvelope.xsd"), options);
    66  			soapSchema = XmlBeans.loadXsd(new XmlObject[] { soapSchemaXml });
    67
    68  	   	soapEnvelopeType = soapSchema.findDocumentType( envelopeQName );
    69  	   	soapFaultType = soapSchema.findDocumentType( faultQName );
    70
    71  	   	soapEncodingXml = XmlObject.Factory.parse(SoapUI.class.getResource("/soapEncoding.xsd"), options);
    72     	}
    73     	catch( Exception e )
    74     	{
    75     		SoapUI.logError( e );
    76     	}
    77     	finally
    78     	{
    79     		Thread.currentThread().setContextClassLoader( contextClassLoader );
    80     	}
    81     }
    82
    83  	public SchemaType getEnvelopeType()
    84  	{
    85  		return EnvelopeDocument.type;
    86  	}
    87
    88  	public String getEnvelopeNamespace()
    89  	{
    90  		return Constants.SOAP11_ENVELOPE_NS;
    91  	}
    92
    93  	public String getEncodingNamespace()
    94  	{
    95  		return Constants.SOAP_ENCODING_NS;
    96  	}
    97
    98  	public XmlObject getSoapEncodingSchema() throws XmlException, IOException
    99  	{
    100 		return soapEncodingXml;
    101 	}
    102
    103 	public XmlObject getSoapEnvelopeSchema() throws XmlException, IOException
    104 	{
    105 		return soapSchemaXml;
    106 	}
    107
    108 	public String toString()
    109 	{
    110 		return "SOAP 1.1";
    111 	}
    112
    113 	public String getContentTypeHttpHeader(String encoding)
    114 	{
    115 		if (encoding == null || encoding.trim().length() == 0)
    116 			return getContentType();
    117 		else
    118 			return getContentType() + ";charset=" + encoding;
    119 	}
    120
    121 	public String getContentType()
    122 	{
    123 		return "text/xml";
    124 	}
    125
    126 	public QName getBodyQName()
    127 	{
    128 		return bodyQName;
    129 	}
    130
    131 	public QName getEnvelopeQName()
    132 	{
    133 		return envelopeQName;
    134 	}
    135
    136 	public QName getHeaderQName()
    137 	{
    138 		return headerQName;
    139 	}
    140
    141 	protected SchemaTypeLoader getSoapEnvelopeSchemaLoader()
    142 	{
    143 		return soapSchema;
    144 	}
    145
    146 	public SchemaType getFaultType()
    147 	{
    148 		return soapFaultType;
    149 	}
    150
    151 	public String getName()
    152 	{
    153 		return "SOAP 1.1";
    154 	}
    155 }