package org.apache.synapse.format.hessian;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.soap.SOAPBody;
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axiom.soap.SOAPFactory;
import org.apache.axiom.soap.SOAPFault;
import org.apache.axiom.soap.SOAPFaultCode;
import org.apache.axiom.soap.SOAPFaultDetail;
import org.apache.axiom.soap.SOAPFaultReason;
import org.apache.axis2.AxisFault;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.engine.AxisConfiguration;
import org.apache.commons.io.IOUtils;
import org.apache.synapse.SynapseConstants;
import org.apache.synapse.core.SynapseEnvironment;
import java.io.IOException;
import java.io.InputStream;
/**
* Helper class to support both HessianMessageBuilder and HessianMessageFormatter tests.
*/
public class HessianTestHelper {
static final String HESSIAN_DUMMY_FAULT_V1_RESPONSE = "hessianDummyFaultResponse_V1.bin";
static final String HESSIAN_DUMMY_REQUEST = "hessianDummyRequest.bin";
static final String HESSIAN_INCOMPLETE = "hessianIncomplete.bin";
static final String CHARSET_ENCODING = "UTF-8";
public MessageContext createAxis2MessageContext(SynapseEnvironment synEnv) throws AxisFault {
MessageContext msgContext = new MessageContext();
AxisConfiguration axisConfig = new AxisConfiguration();
ConfigurationContext configContext = new ConfigurationContext(axisConfig);
if (synEnv != null) {
axisConfig.addParameter(SynapseConstants.SYNAPSE_ENV, synEnv);
}
msgContext.setConfigurationContext(configContext);
return msgContext;
}
public void addBodyToMessageContext(MessageContext msgContext, OMElement element) throws AxisFault {
SOAPEnvelope envelope = OMAbstractFactory.getSOAP11Factory().getDefaultEnvelope();
SOAPBody body = envelope.getBody();
body.addChild(element);
msgContext.setEnvelope(envelope);
}
public void addSoapFaultToMessageContext(MessageContext msgContext, String faultCode,
String faultReason, String faultDetail) throws AxisFault {
SOAPFactory factory = OMAbstractFactory.getSOAP11Factory();
SOAPEnvelope faultEnvelope = factory.getDefaultFaultEnvelope();
SOAPFault soapFault = faultEnvelope.getBody().getFault();
SOAPFaultCode soapFaultCode = factory.createSOAPFaultCode();
soapFaultCode.setText(faultCode);
soapFault.setCode(soapFaultCode);
SOAPFaultReason soapFaultReason = factory.createSOAPFaultReason();
soapFaultReason.setText(faultReason);
soapFault.setReason(soapFaultReason);
SOAPFaultDetail soapFaultDetail = factory.createSOAPFaultDetail();
soapFaultDetail.setText(faultDetail);
soapFault.setDetail(soapFaultDetail);
msgContext.setEnvelope(faultEnvelope);
}
public byte[] getTestMessageAsBytes(String testMessageName) throws IOException {
InputStream is = getClass().getResourceAsStream(testMessageName);
return IOUtils.toByteArray(is);
}
public OMElement buildHessianTestMessage(String testMessageName, MessageContext msgContext)
throws AxisFault {
HessianMessageBuilder messageBuilder = new HessianMessageBuilder();
InputStream is = getClass().getResourceAsStream(testMessageName);
OMElement element = messageBuilder.processDocument(is,
HessianConstants.HESSIAN_CONTENT_TYPE, msgContext);
return element;
}
}