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.message.RPCElement; 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; /** * Test deserialization of SOAP 1.2 messages with references, by putting the * actual value in various places in the message. */ public class TestHrefs extends TestCase { private String HEAD; private String HEADERT; private String BODYT; public TestHrefs(String name) { this(name, Constants.URI_DEFAULT_SCHEMA_XSI, Constants.URI_DEFAULT_SCHEMA_XSD); } public TestHrefs(String name, String NS_XSI, String NS_XSD) { super(name); HEAD = "\n" + "\n" + "\n"; HEADERT = "\n" + "\n" + "\n"; BODYT = "\n" + "\n" + "\n"; } private void deserialize(String data, Object expected, int pos) throws Exception { Message message = new Message(data); MessageContext context = new MessageContext(new AxisServer()); message.setMessageContext(context); context.setProperty(Constants.MC_NO_OPERATION_OK, Boolean.TRUE); SOAPEnvelope envelope = (SOAPEnvelope)message.getSOAPEnvelope(); assertNotNull("SOAP envelope should not be null", envelope); RPCElement body = (RPCElement)envelope.getFirstBody(); assertNotNull("SOAP body should not be null", body); Vector arglist = body.getParams(); assertNotNull("arglist", arglist); assertTrue("SOAP param.size()<=0 {Should be > 0}", arglist.size()>0); RPCParam param = (RPCParam) arglist.get(pos); assertNotNull("SOAP param should not be null", param); Object result = param.getObjectValue(); assertEquals("Expected result not received", expected, result); } public void testStringReference1() throws Exception { String result = HEAD + HEADERT + "abc" + "\n" + BODYT; deserialize(result, "abc", 1); } public void testIntReference1() throws Exception { String result = HEAD + HEADERT + "567" + "\n" + BODYT; deserialize(result, new Integer(567), 1); } public void testStringReferenceInHeader() throws Exception { String result = HEAD + "abc" + HEADERT + "\n" + BODYT; deserialize(result, "abc", 0); } public void testIDANDHREF() throws Exception { String result = HEAD + HEADERT + "abc" + 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"); } }