/*
* Copyright 2005-2010 the original author or authors.
*
* 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.springframework.ws.soap.soap12;
import java.util.Iterator;
import java.util.Locale;
import javax.xml.namespace.QName;
import org.springframework.ws.soap.AbstractSoapBodyTestCase;
import org.springframework.ws.soap.SoapFault;
import org.springframework.ws.soap.SoapFaultDetail;
import org.springframework.ws.soap.SoapFaultDetailElement;
import org.springframework.ws.soap.SoapVersion;
import org.springframework.xml.transform.StringResult;
import org.springframework.xml.transform.StringSource;
import org.junit.Test;
import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual;
import static org.junit.Assert.*;
public abstract class AbstractSoap12BodyTestCase extends AbstractSoapBodyTestCase {
@Test
public void testGetType() {
assertTrue("Invalid type returned", soapBody instanceof Soap12Body);
}
@Test
public void testGetName() throws Exception {
assertEquals("Invalid qualified name", new QName(SoapVersion.SOAP_12.getEnvelopeNamespaceUri(), "Body"),
soapBody.getName());
}
@Test
public void testGetSource() throws Exception {
StringResult result = new StringResult();
transformer.transform(soapBody.getSource(), result);
assertXMLEqual("Invalid contents of body", "<Body xmlns='http://www.w3.org/2003/05/soap-envelope' />",
result.toString());
}
@Test
public void testAddMustUnderstandFault() throws Exception {
SoapFault fault = soapBody.addMustUnderstandFault("SOAP Must Understand Error", Locale.ENGLISH);
assertEquals("Invalid fault code", new QName("http://www.w3.org/2003/05/soap-envelope", "MustUnderstand"),
fault.getFaultCode());
StringResult result = new StringResult();
transformer.transform(fault.getSource(), result);
assertXMLEqual("Invalid contents of body",
"<soapenv:Fault xmlns:soapenv='http://www.w3.org/2003/05/soap-envelope'>" +
"<soapenv:Code><soapenv:Value>" + soapBody.getName().getPrefix() +
":MustUnderstand</soapenv:Value></soapenv:Code>" +
"<soapenv:Reason><soapenv:Text xml:lang='en'>SOAP Must Understand Error</soapenv:Text>" +
"</soapenv:Reason></soapenv:Fault>", result.toString());
}
@Test
public void testAddSenderFault() throws Exception {
SoapFault fault = soapBody.addClientOrSenderFault("faultString", Locale.ENGLISH);
assertEquals("Invalid fault code", new QName("http://www.w3.org/2003/05/soap-envelope", "Sender"),
fault.getFaultCode());
StringResult result = new StringResult();
transformer.transform(fault.getSource(), result);
assertXMLEqual("Invalid contents of body",
"<soapenv:Fault xmlns:soapenv='http://www.w3.org/2003/05/soap-envelope'>" +
"<soapenv:Code><soapenv:Value>" + soapBody.getName().getPrefix() +
":Sender</soapenv:Value></soapenv:Code>" +
"<soapenv:Reason><soapenv:Text xml:lang='en'>faultString</soapenv:Text></soapenv:Reason>" +
"</soapenv:Fault>", result.toString());
}
@Test
public void testAddReceiverFault() throws Exception {
SoapFault fault = soapBody.addServerOrReceiverFault("faultString", Locale.ENGLISH);
assertEquals("Invalid fault code", new QName("http://www.w3.org/2003/05/soap-envelope", "Receiver"),
fault.getFaultCode());
StringResult result = new StringResult();
transformer.transform(fault.getSource(), result);
assertXMLEqual("Invalid contents of body",
"<soapenv:Fault xmlns:soapenv='http://www.w3.org/2003/05/soap-envelope'>" +
"<soapenv:Code><soapenv:Value>" + soapBody.getName().getPrefix() +
":Receiver</soapenv:Value></soapenv:Code>" +
"<soapenv:Reason><soapenv:Text xml:lang='en'>faultString</soapenv:Text></soapenv:Reason>" +
"</soapenv:Fault>", result.toString());
}
@Test
public void testAddFaultWithDetail() throws Exception {
SoapFault fault = soapBody.addServerOrReceiverFault("faultString", Locale.ENGLISH);
SoapFaultDetail detail = fault.addFaultDetail();
SoapFaultDetailElement detailElement =
detail.addFaultDetailElement(new QName("namespace", "localPart", "prefix"));
StringSource detailContents = new StringSource("<detailContents xmlns='namespace'/>");
transformer.transform(detailContents, detailElement.getResult());
StringResult result = new StringResult();
transformer.transform(fault.getSource(), result);
assertXMLEqual("Invalid source for body",
"<soapenv:Fault xmlns:soapenv='http://www.w3.org/2003/05/soap-envelope'>" +
"<soapenv:Code><soapenv:Value>" + soapBody.getName().getPrefix() + ":Receiver</soapenv:Value>" +
"</soapenv:Code>" +
"<soapenv:Reason><soapenv:Text xml:lang='en'>faultString</soapenv:Text></soapenv:Reason>" +
"<soapenv:Detail><prefix:localPart xmlns:prefix='namespace'><detailContents xmlns='namespace'/>" +
"</prefix:localPart></soapenv:Detail></soapenv:Fault>", result.toString());
}
@Test
public void testAddFaultWithDetailResult() throws Exception {
SoapFault fault = soapBody.addServerOrReceiverFault("faultString", Locale.ENGLISH);
SoapFaultDetail detail = fault.addFaultDetail();
transformer.transform(new StringSource("<detailContents xmlns='namespace'/>"), detail.getResult());
transformer.transform(new StringSource("<detailContents xmlns='namespace'/>"), detail.getResult());
StringResult result = new StringResult();
transformer.transform(fault.getSource(), result);
assertXMLEqual("Invalid source for body",
"<soapenv:Fault xmlns:soapenv='http://www.w3.org/2003/05/soap-envelope'>" +
"<soapenv:Code><soapenv:Value>" + soapBody.getName().getPrefix() + ":Receiver</soapenv:Value>" +
"</soapenv:Code>" +
"<soapenv:Reason><soapenv:Text xml:lang='en'>faultString</soapenv:Text></soapenv:Reason>" +
"<soapenv:Detail>" + "<detailContents xmlns='namespace'/>" +
"<detailContents xmlns='namespace'/>" + "</soapenv:Detail></soapenv:Fault>", result.toString());
}
@Test
public void testAddFaultWithSubcode() throws Exception {
Soap12Fault fault = (Soap12Fault) soapBody.addServerOrReceiverFault("faultString", Locale.ENGLISH);
QName subcode1 = new QName("http://www.springframework.org", "Subcode1", "spring-ws");
fault.addFaultSubcode(subcode1);
QName subcode2 = new QName("http://www.springframework.org", "Subcode2", "spring-ws");
fault.addFaultSubcode(subcode2);
Iterator<QName> iterator = fault.getFaultSubcodes();
assertTrue("No subcode found", iterator.hasNext());
assertEquals("Invalid subcode", subcode1, iterator.next());
assertTrue("No subcode found", iterator.hasNext());
assertEquals("Invalid subcode", subcode2, iterator.next());
assertFalse("Subcode found", iterator.hasNext());
StringResult result = new StringResult();
transformer.transform(fault.getSource(), result);
assertXMLEqual("Invalid source for body",
"<soapenv:Fault xmlns:soapenv='http://www.w3.org/2003/05/soap-envelope'>" +
"<soapenv:Code><soapenv:Value>" + soapBody.getName().getPrefix() + ":Receiver</soapenv:Value>" +
"<soapenv:Subcode><soapenv:Value xmlns:spring-ws='http://www.springframework.org'>spring-ws:Subcode1</soapenv:Value>" +
"<soapenv:Subcode><soapenv:Value xmlns:spring-ws='http://www.springframework.org'>spring-ws:Subcode2</soapenv:Value>" +
"</soapenv:Subcode></soapenv:Subcode></soapenv:Code>" +
"<soapenv:Reason><soapenv:Text xml:lang='en'>faultString</soapenv:Text></soapenv:Reason>" +
"</soapenv:Fault>", result.toString());
}
}