{
response.setStatus(200);
response.setBufferSize(1024 * 8);
MessageContext context = createMessageContext(request, response, service);
Channel channel = createChannel(context);
String soapAction = getSoapAction(request);
String contentType = request.getContentType();
if (null == contentType)
{
response.setContentType("text/html; charset=UTF-8");
// TODO: generate service description here
response.getWriter().write("<html><body>Invalid SOAP request.</body></html>");
response.getWriter().close();
}
else if (contentType.toLowerCase().indexOf("multipart/related") != -1)
{
// Nasty Hack to workaraound bug with lowercasing contenttype by some serwers what cause problems with finding message parts.
// There should be better fix for this.
String ct = request.getContentType().replaceAll("--=_part_","--=_Part_");
Attachments atts = new StreamedAttachments(context,request.getInputStream(), ct);
String encoding = getEncoding(atts.getSoapContentType());
XMLStreamReader reader =
STAXUtils.createXMLStreamReader(atts.getSoapMessage().getDataHandler().getInputStream(),
encoding,
context);
InMessage message = new InMessage(reader, request.getRequestURI());
message.setProperty(SoapConstants.SOAP_ACTION, soapAction);
message.setAttachments(atts);
channel.receive(context, message);
try
{
reader.close();
}
catch (XMLStreamException e)
{
throw new XFireRuntimeException("Could not close XMLStreamReader.");
}
}
else
{
// Remove " and ' char
String charEncoding = request.getCharacterEncoding();
charEncoding = dequote(charEncoding);
XMLStreamReader reader =
STAXUtils.createXMLStreamReader(request.getInputStream(),
charEncoding,
context);
InMessage message = new InMessage(reader, request.getRequestURI());
message.setProperty(SoapConstants.SOAP_ACTION, soapAction);
channel.receive(context, message);
try
{
reader.close();
}