Hi everybody!
I made an application that send attachments on soap message using SWA and
MTOM. The client and server works properly. Now, I am trying to use GZIP in
order to compress/decompress SOAP messages.
My Service code:
public OMElement downloadFileSWA(OMElement element) throws Exception {
FileDataSource binaryDataSource;
DataHandler binaryDataHandler;
String vectorFileType[] =
{"file10KB","file100KB","file1MB","file10MB","file100MB"};
// Checking if the resources folder is available
File file = new File(filePath);
if (!file.isDirectory() || !file.exists()){
throw new AxisFault("File not available in the service
provider...");
}
// Obtain the request (incoming) from the MessageContext as
follows
MessageContext inMessageContext =
MessageContext.getCurrentMessageContext();
// Obtain the operation context from the request message context
OperationContext operationContext =
inMessageContext.getOperationContext();
// Obtain the response (outgoing) message context from the
operation
context
MessageContext outMessageContext =
operationContext.getMessageContext(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
outMessageContext.setProperty(HTTPConstants.MC_GZIP_RESPONSE,
true);
outMessageContext.setProperty(HTTPConstants.MC_ACCEPT_GZIP,
true);
// Get the first element from the received message
String firstElem = element.getFirstElement().getText();
OMElement result = null;
for (int i = 0; i < vectorFileType.length; i++) {
if (vectorFileType[i].equalsIgnoreCase(firstElem)) {
binaryDataSource = new FileDataSource(filePath
+File.separator+
vectorFileType[i]);
binaryDataHandler = new
DataHandler(binaryDataSource);
// Add the created data handler as an
attachment to the outgoing
message.
String binaryID =
outMessageContext.addAttachment(binaryDataHandler);
result =
buildDownloadFileSWAEnvelope(vectorFileType[i],binaryID);
break;
}
}
return result;
}
My Client code:
public void donwloadBinarySWA(String binaryName) throws Exception {
System.out.println("Download Binary with SWA");
Options options = new Options();
options.setProperty(HTTPConstants.MC_GZIP_REQUEST,
Boolean.TRUE);
options.setProperty(HTTPConstants.MC_GZIP_RESPONSE,
Boolean.TRUE);
ServiceClient sender = new ServiceClient();
sender.setOptions(options);
OperationClient mepClient =
sender.createClient(ServiceClient.ANON_OUT_IN_OP);
MessageContext mc = new MessageContext();
SOAPEnvelope env = buildEnvelopeDownloadBinarySWA(binaryName);
mc.setEnvelope(env);
mepClient.addMessageContext(mc);
mepClient.execute(true);
// Get the message context for the response
MessageContext response =
mepClient.getMessageContext(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
SOAPBody body = response.getEnvelope().getBody();
OMElement element = body.getFirstChildWithName(new
QName("http://service.sample/xsd";, "donwloadResponse"));
if (element != null) {
processDownloadBinarySWA(response, element);
} else {
throw new Exception("Malformed response.");
}
}
I am also using TCPMon to monitor all soap messages that are sent to my
service. What I can see is that all requests are compressed with GZIP but
responses are not. My tests are being made using both Axis2 1.3 (as a
server) and Tomcat 6.0.18 with this options in server.xml:
port="8080" protocol="HTTP/1.1"
connectionTimeout="2"
redirectPort="8443"
compression="on"
compressionMinSize="2048"
noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/html,text/xml"
Both in Axis2 and Tomcat the responses are not compressed.
Is it a bug on Axis2?
Someone had t