sync = false;
}
// Get the dispatch endpoint
String uri = msgContext.getStrProp(MessageContext.TRANS_URL);
ImmutableEndpoint requestEndpoint = (ImmutableEndpoint)call
.getProperty(MuleProperties.MULE_ENDPOINT_PROPERTY);
OutboundEndpoint endpoint;
// put username and password in URI if they are set on the current event
if (msgContext.getUsername() != null)
{
String[] tempEndpoint = uri.split("//");
String credentialString = msgContext.getUsername() + ":"
+ msgContext.getPassword();
uri = tempEndpoint[0] + "//" + credentialString + "@" + tempEndpoint[1];
endpoint = lookupEndpoint(uri);
}
else
{
endpoint = lookupEndpoint(uri);
}
if (requestEndpoint.getConnector() instanceof AxisConnector)
{
msgContext.setTypeMappingRegistry(((AxisConnector)requestEndpoint.getConnector())
.getAxis().getTypeMappingRegistry());
}
Map<String, Object> props = new HashMap<String, Object>();
Object payload;
int contentLength = 0;
String contentType = null;
if (msgContext.getRequestMessage().countAttachments() > 0)
{
File temp = File.createTempFile("soap", ".tmp");
temp.deleteOnExit(); // TODO cleanup files earlier (IOUtils has a
// file tracker)
FileOutputStream fos = new FileOutputStream(temp);
msgContext.getRequestMessage().writeTo(fos);
fos.close();
contentLength = (int)temp.length();
payload = new FileInputStream(temp);
contentType = "multipart/related";
}
else
{
ByteArrayOutputStream baos = new ByteArrayOutputStream(8192);
msgContext.getRequestMessage().writeTo(baos);
baos.close();
payload = baos.toByteArray();
}
// props.putAll(event.getProperties());
for (Iterator iterator = msgContext.getPropertyNames(); iterator.hasNext();)
{
String name = (String)iterator.next();
if (!name.equals("call_object") && !name.equals("wsdl.service"))
{
props.put(name, msgContext.getProperty(name));
}
}
// add all custom headers, filter out all mule headers (such as
// MULE_SESSION) except
// for MULE_USER header. Filter out other headers like "soapMethods" and
// MuleProperties.MULE_METHOD_PROPERTY and "soapAction"
// and also filter out any http related header
if ((RequestContext.getEvent() != null)
&& (RequestContext.getEvent().getMessage() != null))
{
props = AxisCleanAndAddProperties.cleanAndAdd(RequestContext.getEventContext());
}
// with jms and vm the default SOAPAction will result in the name of the endpoint, which we may not necessarily want. This should be set manually on the endpoint
String scheme = requestEndpoint.getEndpointURI().getScheme();
if (!("vm".equalsIgnoreCase(scheme) || "jms".equalsIgnoreCase(scheme)))
{
if (call.useSOAPAction())
{
uri = call.getSOAPActionURI();