You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by th...@apache.org on 2005/08/22 12:53:51 UTC
svn commit: r234467 -
/webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/http/CommonsHTTPTransportSender.java
Author: thilina
Date: Mon Aug 22 03:53:40 2005
New Revision: 234467
URL: http://svn.apache.org/viewcvs?rev=234467&view=rev
Log:
fixing support for "*m*ultipart/*r*elated"
Modified:
webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/http/CommonsHTTPTransportSender.java
Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/http/CommonsHTTPTransportSender.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/http/CommonsHTTPTransportSender.java?rev=234467&r1=234466&r2=234467&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/http/CommonsHTTPTransportSender.java (original)
+++ webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/http/CommonsHTTPTransportSender.java Mon Aug 22 03:53:40 2005
@@ -1,543 +1,543 @@
-/*
-* Copyright 2004,2005 The Apache Software Foundation.
-*
-* Licensed under the Apache License, Version 2.0 (the "License"); you may not
-* use this file except in compliance with the License. You may obtain a copy of
-* the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-* License for the specific language governing permissions and limitations under
-* the License.
-*/
-
-package org.apache.axis2.transport.http;
-
-import org.apache.axis2.AxisFault;
-import org.apache.axis2.Constants;
-import org.apache.axis2.soap.SOAP11Constants;
-import org.apache.axis2.soap.SOAP12Constants;
-import org.apache.axis2.addressing.AddressingConstants;
-import org.apache.axis2.addressing.EndpointReference;
-import org.apache.axis2.context.ConfigurationContext;
-import org.apache.axis2.context.MessageContext;
-import org.apache.axis2.context.OperationContext;
-import org.apache.axis2.description.Parameter;
-import org.apache.axis2.description.TransportOutDescription;
-import org.apache.axis2.handlers.AbstractHandler;
-import org.apache.axis2.i18n.Messages;
-import org.apache.axis2.om.OMElement;
-import org.apache.axis2.om.impl.OMOutputImpl;
-import org.apache.axis2.transport.TransportSender;
-import org.apache.commons.httpclient.*;
-import org.apache.commons.httpclient.methods.GetMethod;
-import org.apache.commons.httpclient.methods.PostMethod;
-import org.apache.commons.httpclient.methods.RequestEntity;
-
-import javax.xml.stream.FactoryConfigurationError;
-import javax.xml.stream.XMLOutputFactory;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamWriter;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-
-public class CommonsHTTPTransportSender
- extends AbstractHandler
- implements TransportSender {
- private boolean chuncked = false;
-
- private String httpVersion = HTTPConstants.HEADER_PROTOCOL_11;
-
- public static final String HTTP_METHOD = "HTTP_METHOD";
-
- protected HttpClient httpClient;
-
- protected OMElement outputMessage;
-
- protected OMOutputImpl omOutput = new OMOutputImpl();
-
- public CommonsHTTPTransportSender() {
- } //default
-
- public void invoke(MessageContext msgContext) throws AxisFault {
- try {
- String charSetEnc =
- (String) msgContext.getProperty(
- MessageContext.CHARACTER_SET_ENCODING);
- if (charSetEnc != null) {
- omOutput.setCharSetEncoding(charSetEnc);
- } else {
- OperationContext opctx = msgContext.getOperationContext();
- if(opctx != null) {
- charSetEnc = (String)opctx.getProperty(MessageContext.CHARACTER_SET_ENCODING);
- } else {
- charSetEnc = MessageContext.DEFAULT_CHAR_SET_ENCODING;
- }
- }
- msgContext.setDoingMTOM(HTTPTransportUtils.doWriteMTOM(msgContext));
- omOutput.setSoap11(msgContext.isSOAP11());
- omOutput.setDoOptimize(msgContext.isDoingMTOM());
-
- //Check for the REST behaviour, if you desire rest beahaviour
- //put a <parameter name="doREST" value="true"/> at the
- // server.xml/client.xml file
- EndpointReference epr = null;
- if (msgContext.getTo() != null
- && !AddressingConstants.Submission.WSA_ANONYMOUS_URL.equals(
- msgContext.getTo().getAddress())
- && !AddressingConstants.Final.WSA_ANONYMOUS_URL.equals(
- msgContext.getTo().getAddress())) {
- epr = msgContext.getTo();
- }
-
- OMElement dataOut;
- if (msgContext.isDoingREST()) {
- dataOut = msgContext.getEnvelope().getBody().getFirstElement();
- } else {
- dataOut = msgContext.getEnvelope();
- }
-
- //TODO timeout, configuration
- if (epr != null) {
- writeMessageWithCommons(msgContext, epr, dataOut);
- } else {
- OutputStream out =
- (OutputStream) msgContext.getProperty(
- MessageContext.TRANSPORT_OUT);
- if (msgContext.isServerSide()) {
- HTTPOutTransportInfo transportInfo =
- (HTTPOutTransportInfo) msgContext.getProperty(
- HTTPConstants.HTTPOutTransportInfo);
- if (transportInfo != null) {
- omOutput.setSoap11(msgContext.isSOAP11());
- transportInfo.setContentType(omOutput.getContentType());
- }else{
- throw new AxisFault(HTTPConstants.HTTPOutTransportInfo + " does not set");
- }
- }
- omOutput.setOutputStream(out, msgContext.isDoingMTOM());
- dataOut.serialize(omOutput);
- omOutput.flush();
- }
- if(msgContext.getOperationContext() != null){
- msgContext.getOperationContext().setProperty(
- Constants.RESPONSE_WRITTEN,
- Constants.VALUE_TRUE);
- }
- } catch (XMLStreamException e) {
- throw new AxisFault(e);
- } catch (FactoryConfigurationError e) {
- throw new AxisFault(e);
- } catch (IOException e) {
- throw new AxisFault(e);
- }
- }
-
- public void writeMessageWithToOutPutStream(
- MessageContext msgContext,
- OutputStream out) {
-
- }
-
- public void writeMessageWithCommons(
- MessageContext msgContext,
- EndpointReference toURL,
- OMElement dataout)
- throws AxisFault {
- try {
- URL url = new URL(toURL.getAddress());
-
- String soapActionString = msgContext.getSoapAction();
- if (soapActionString == null || soapActionString.length() == 0) {
- soapActionString = msgContext.getWSAAction();
- }
- if (soapActionString == null) {
- soapActionString = "";
- }
- //supporting RESTFacility..
-
- if (!msgContext.isDoingREST()) {
- this.transportConfigurationPOST(
- msgContext,
- dataout,
- url,
- soapActionString);
- }
- if (msgContext.isDoingREST()) {
- if (msgContext.isRestThroughPOST()) {
- this.transportConfigurationPOST(
- msgContext,
- dataout,
- url,
- soapActionString);
- } else {
- this.transportConfigurationGET(msgContext, url);
- }
- }
- } catch (MalformedURLException e) {
- throw new AxisFault(e);
- } catch (HttpException e) {
- throw new AxisFault(e);
- } catch (IOException e) {
- throw new AxisFault(e);
- }
-
- }
- protected HostConfiguration getHostConfiguration(
- MessageContext context,
- URL targetURL) {
- //TODO cheaking wheather the host is a proxy
- HostConfiguration config = new HostConfiguration();
- config.setHost(
- targetURL.getHost(),
- targetURL.getPort() == -1 ? 80 : targetURL.getPort());
- return config;
- }
-
- //get the contentLength...
- public class AxisRequestEntity implements RequestEntity {
-
- private String charSetEnc;
-
- private OMElement element;
-
- private boolean chuncked;
-
- private byte[] bytes;
-
- private boolean doingMTOM = false;
-
- public AxisRequestEntity(
- OMElement element,
- boolean chuncked,
- boolean doingMTOM,
- String charSetEncoding) {
- this.element = element;
- this.chuncked = chuncked;
- this.doingMTOM = doingMTOM;
- this.charSetEnc = charSetEncoding;
- }
-
- public boolean isRepeatable() {
- return true;
- }
-
- public byte[] writeBytes() throws AxisFault {
- try {
- ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();
- XMLStreamWriter outputWriter =
- XMLOutputFactory.newInstance().createXMLStreamWriter(
- bytesOut,
- charSetEnc);
- element.serialize(outputWriter);
- outputWriter.flush();
- return bytesOut.toByteArray();
- } catch (XMLStreamException e) {
- throw new AxisFault(e);
- } catch (FactoryConfigurationError e) {
- throw new AxisFault(e);
- }
- }
-
- public void writeRequest(OutputStream out) throws IOException {
- try {
- if (chuncked || doingMTOM) {
- omOutput.setOutputStream(out, doingMTOM);
- element.serialize(omOutput);
- omOutput.flush();
-
- } else {
- if (bytes == null) {
- bytes = writeBytes();
- }
- out.write(bytes);
- }
- out.flush();
- } catch (XMLStreamException e) {
- throw new AxisFault(e);
- } catch (FactoryConfigurationError e) {
- throw new AxisFault(e);
- } catch (IOException e) {
- throw new AxisFault(e);
- }
- }
-
- public long getContentLength() {
- try {
- if (chuncked || doingMTOM) {
- return -1;
- } else {
- if (bytes == null) {
- bytes = writeBytes();
- }
- return bytes.length;
- }
- } catch (AxisFault e) {
- return -1;
- }
- }
-
- public String getContentType() {
- return omOutput.getContentType();
- }
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.apache.axis2.transport.TransportSender#cleanUp(org.apache.axis2.context.MessageContext)
- */
- public void cleanUp(MessageContext msgContext) throws AxisFault {
- HttpMethod httpMethod =
- (HttpMethod) msgContext.getProperty(HTTP_METHOD);
- if (httpMethod != null) {
- httpMethod.releaseConnection();
- }
-
- }
-
- public void init(
- ConfigurationContext confContext,
- TransportOutDescription transportOut)
- throws AxisFault {
- //<parameter name="PROTOCOL" locked="xsd:false">HTTP/1.0</parameter> or
- //<parameter name="PROTOCOL" locked="xsd:false">HTTP/1.1</parameter> is
- // checked
- Parameter version =
- transportOut.getParameter(HTTPConstants.PROTOCOL_VERSION);
- if (version != null) {
- if (HTTPConstants.HEADER_PROTOCOL_11.equals(version.getValue())) {
- this.httpVersion = HTTPConstants.HEADER_PROTOCOL_11;
- Parameter transferEncoding =
- transportOut.getParameter(
- HTTPConstants.HEADER_TRANSFER_ENCODING);
- if (transferEncoding != null
- && HTTPConstants.HEADER_TRANSFER_ENCODING_CHUNKED.equals(
- transferEncoding.getValue())) {
- this.chuncked = true;
- }
- } else if (
- HTTPConstants.HEADER_PROTOCOL_10.equals(version.getValue())) {
- this.httpVersion = HTTPConstants.HEADER_PROTOCOL_10;
- } else {
- throw new AxisFault(
- "Parameter "
- + HTTPConstants.PROTOCOL_VERSION
- + " Can have values only HTTP/1.0 or HTTP/1.1");
- }
- }
-
- }
-
- private void transportConfigurationPOST(
- MessageContext msgContext,
- OMElement dataout,
- URL url,
- String soapActionString)
- throws MalformedURLException, AxisFault, IOException {
-
- //execuite the HtttpMethodBase - a connection manager can be given for handle multiple
- httpClient = new HttpClient();
- //hostConfig handles the socket functions..
- //HostConfiguration hostConfig = getHostConfiguration(msgContext, url);
+/*
+* Copyright 2004,2005 The Apache Software Foundation.
+*
+* Licensed under the Apache License, Version 2.0 (the "License"); you may not
+* use this file except in compliance with the License. You may obtain a copy of
+* the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+* License for the specific language governing permissions and limitations under
+* the License.
+*/
+
+package org.apache.axis2.transport.http;
+
+import org.apache.axis2.AxisFault;
+import org.apache.axis2.Constants;
+import org.apache.axis2.soap.SOAP11Constants;
+import org.apache.axis2.soap.SOAP12Constants;
+import org.apache.axis2.addressing.AddressingConstants;
+import org.apache.axis2.addressing.EndpointReference;
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.context.OperationContext;
+import org.apache.axis2.description.Parameter;
+import org.apache.axis2.description.TransportOutDescription;
+import org.apache.axis2.handlers.AbstractHandler;
+import org.apache.axis2.i18n.Messages;
+import org.apache.axis2.om.OMElement;
+import org.apache.axis2.om.impl.OMOutputImpl;
+import org.apache.axis2.transport.TransportSender;
+import org.apache.commons.httpclient.*;
+import org.apache.commons.httpclient.methods.GetMethod;
+import org.apache.commons.httpclient.methods.PostMethod;
+import org.apache.commons.httpclient.methods.RequestEntity;
+
+import javax.xml.stream.FactoryConfigurationError;
+import javax.xml.stream.XMLOutputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamWriter;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+public class CommonsHTTPTransportSender
+ extends AbstractHandler
+ implements TransportSender {
+ private boolean chuncked = false;
+
+ private String httpVersion = HTTPConstants.HEADER_PROTOCOL_11;
+
+ public static final String HTTP_METHOD = "HTTP_METHOD";
+
+ protected HttpClient httpClient;
+
+ protected OMElement outputMessage;
+
+ protected OMOutputImpl omOutput = new OMOutputImpl();
+
+ public CommonsHTTPTransportSender() {
+ } //default
+
+ public void invoke(MessageContext msgContext) throws AxisFault {
+ try {
+ String charSetEnc =
+ (String) msgContext.getProperty(
+ MessageContext.CHARACTER_SET_ENCODING);
+ if (charSetEnc != null) {
+ omOutput.setCharSetEncoding(charSetEnc);
+ } else {
+ OperationContext opctx = msgContext.getOperationContext();
+ if(opctx != null) {
+ charSetEnc = (String)opctx.getProperty(MessageContext.CHARACTER_SET_ENCODING);
+ } else {
+ charSetEnc = MessageContext.DEFAULT_CHAR_SET_ENCODING;
+ }
+ }
+ msgContext.setDoingMTOM(HTTPTransportUtils.doWriteMTOM(msgContext));
+ omOutput.setSoap11(msgContext.isSOAP11());
+ omOutput.setDoOptimize(msgContext.isDoingMTOM());
+
+ //Check for the REST behaviour, if you desire rest beahaviour
+ //put a <parameter name="doREST" value="true"/> at the
+ // server.xml/client.xml file
+ EndpointReference epr = null;
+ if (msgContext.getTo() != null
+ && !AddressingConstants.Submission.WSA_ANONYMOUS_URL.equals(
+ msgContext.getTo().getAddress())
+ && !AddressingConstants.Final.WSA_ANONYMOUS_URL.equals(
+ msgContext.getTo().getAddress())) {
+ epr = msgContext.getTo();
+ }
+
+ OMElement dataOut;
+ if (msgContext.isDoingREST()) {
+ dataOut = msgContext.getEnvelope().getBody().getFirstElement();
+ } else {
+ dataOut = msgContext.getEnvelope();
+ }
+
+ //TODO timeout, configuration
+ if (epr != null) {
+ writeMessageWithCommons(msgContext, epr, dataOut);
+ } else {
+ OutputStream out =
+ (OutputStream) msgContext.getProperty(
+ MessageContext.TRANSPORT_OUT);
+ if (msgContext.isServerSide()) {
+ HTTPOutTransportInfo transportInfo =
+ (HTTPOutTransportInfo) msgContext.getProperty(
+ HTTPConstants.HTTPOutTransportInfo);
+ if (transportInfo != null) {
+ omOutput.setSoap11(msgContext.isSOAP11());
+ transportInfo.setContentType(omOutput.getContentType());
+ }else{
+ throw new AxisFault(HTTPConstants.HTTPOutTransportInfo + " does not set");
+ }
+ }
+ omOutput.setOutputStream(out, msgContext.isDoingMTOM());
+ dataOut.serialize(omOutput);
+ omOutput.flush();
+ }
+ if(msgContext.getOperationContext() != null){
+ msgContext.getOperationContext().setProperty(
+ Constants.RESPONSE_WRITTEN,
+ Constants.VALUE_TRUE);
+ }
+ } catch (XMLStreamException e) {
+ throw new AxisFault(e);
+ } catch (FactoryConfigurationError e) {
+ throw new AxisFault(e);
+ } catch (IOException e) {
+ throw new AxisFault(e);
+ }
+ }
+
+ public void writeMessageWithToOutPutStream(
+ MessageContext msgContext,
+ OutputStream out) {
+
+ }
+
+ public void writeMessageWithCommons(
+ MessageContext msgContext,
+ EndpointReference toURL,
+ OMElement dataout)
+ throws AxisFault {
+ try {
+ URL url = new URL(toURL.getAddress());
+
+ String soapActionString = msgContext.getSoapAction();
+ if (soapActionString == null || soapActionString.length() == 0) {
+ soapActionString = msgContext.getWSAAction();
+ }
+ if (soapActionString == null) {
+ soapActionString = "";
+ }
+ //supporting RESTFacility..
+
+ if (!msgContext.isDoingREST()) {
+ this.transportConfigurationPOST(
+ msgContext,
+ dataout,
+ url,
+ soapActionString);
+ }
+ if (msgContext.isDoingREST()) {
+ if (msgContext.isRestThroughPOST()) {
+ this.transportConfigurationPOST(
+ msgContext,
+ dataout,
+ url,
+ soapActionString);
+ } else {
+ this.transportConfigurationGET(msgContext, url);
+ }
+ }
+ } catch (MalformedURLException e) {
+ throw new AxisFault(e);
+ } catch (HttpException e) {
+ throw new AxisFault(e);
+ } catch (IOException e) {
+ throw new AxisFault(e);
+ }
+
+ }
+ protected HostConfiguration getHostConfiguration(
+ MessageContext context,
+ URL targetURL) {
+ //TODO cheaking wheather the host is a proxy
+ HostConfiguration config = new HostConfiguration();
+ config.setHost(
+ targetURL.getHost(),
+ targetURL.getPort() == -1 ? 80 : targetURL.getPort());
+ return config;
+ }
+
+ //get the contentLength...
+ public class AxisRequestEntity implements RequestEntity {
+
+ private String charSetEnc;
+
+ private OMElement element;
+
+ private boolean chuncked;
+
+ private byte[] bytes;
+
+ private boolean doingMTOM = false;
+
+ public AxisRequestEntity(
+ OMElement element,
+ boolean chuncked,
+ boolean doingMTOM,
+ String charSetEncoding) {
+ this.element = element;
+ this.chuncked = chuncked;
+ this.doingMTOM = doingMTOM;
+ this.charSetEnc = charSetEncoding;
+ }
+
+ public boolean isRepeatable() {
+ return true;
+ }
+
+ public byte[] writeBytes() throws AxisFault {
+ try {
+ ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();
+ XMLStreamWriter outputWriter =
+ XMLOutputFactory.newInstance().createXMLStreamWriter(
+ bytesOut,
+ charSetEnc);
+ element.serialize(outputWriter);
+ outputWriter.flush();
+ return bytesOut.toByteArray();
+ } catch (XMLStreamException e) {
+ throw new AxisFault(e);
+ } catch (FactoryConfigurationError e) {
+ throw new AxisFault(e);
+ }
+ }
+
+ public void writeRequest(OutputStream out) throws IOException {
+ try {
+ if (chuncked || doingMTOM) {
+ omOutput.setOutputStream(out, doingMTOM);
+ element.serialize(omOutput);
+ omOutput.flush();
+
+ } else {
+ if (bytes == null) {
+ bytes = writeBytes();
+ }
+ out.write(bytes);
+ }
+ out.flush();
+ } catch (XMLStreamException e) {
+ throw new AxisFault(e);
+ } catch (FactoryConfigurationError e) {
+ throw new AxisFault(e);
+ } catch (IOException e) {
+ throw new AxisFault(e);
+ }
+ }
+
+ public long getContentLength() {
+ try {
+ if (chuncked || doingMTOM) {
+ return -1;
+ } else {
+ if (bytes == null) {
+ bytes = writeBytes();
+ }
+ return bytes.length;
+ }
+ } catch (AxisFault e) {
+ return -1;
+ }
+ }
+
+ public String getContentType() {
+ return omOutput.getContentType();
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.axis2.transport.TransportSender#cleanUp(org.apache.axis2.context.MessageContext)
+ */
+ public void cleanUp(MessageContext msgContext) throws AxisFault {
+ HttpMethod httpMethod =
+ (HttpMethod) msgContext.getProperty(HTTP_METHOD);
+ if (httpMethod != null) {
+ httpMethod.releaseConnection();
+ }
+
+ }
+
+ public void init(
+ ConfigurationContext confContext,
+ TransportOutDescription transportOut)
+ throws AxisFault {
+ //<parameter name="PROTOCOL" locked="xsd:false">HTTP/1.0</parameter> or
+ //<parameter name="PROTOCOL" locked="xsd:false">HTTP/1.1</parameter> is
+ // checked
+ Parameter version =
+ transportOut.getParameter(HTTPConstants.PROTOCOL_VERSION);
+ if (version != null) {
+ if (HTTPConstants.HEADER_PROTOCOL_11.equals(version.getValue())) {
+ this.httpVersion = HTTPConstants.HEADER_PROTOCOL_11;
+ Parameter transferEncoding =
+ transportOut.getParameter(
+ HTTPConstants.HEADER_TRANSFER_ENCODING);
+ if (transferEncoding != null
+ && HTTPConstants.HEADER_TRANSFER_ENCODING_CHUNKED.equals(
+ transferEncoding.getValue())) {
+ this.chuncked = true;
+ }
+ } else if (
+ HTTPConstants.HEADER_PROTOCOL_10.equals(version.getValue())) {
+ this.httpVersion = HTTPConstants.HEADER_PROTOCOL_10;
+ } else {
+ throw new AxisFault(
+ "Parameter "
+ + HTTPConstants.PROTOCOL_VERSION
+ + " Can have values only HTTP/1.0 or HTTP/1.1");
+ }
+ }
+
+ }
+
+ private void transportConfigurationPOST(
+ MessageContext msgContext,
+ OMElement dataout,
+ URL url,
+ String soapActionString)
+ throws MalformedURLException, AxisFault, IOException {
+
+ //execuite the HtttpMethodBase - a connection manager can be given for handle multiple
+ httpClient = new HttpClient();
+ //hostConfig handles the socket functions..
+ //HostConfiguration hostConfig = getHostConfiguration(msgContext, url);
// SO_TIMEOUT -- timeout for blocking reads
httpClient.getHttpConnectionManager().getParams().setSoTimeout(60000);
// timeout for initial connection
httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(60000);
-
- PostMethod postMethod = new PostMethod(url.toString());
- postMethod.setPath(url.getFile());
-
- msgContext.setProperty(HTTP_METHOD, postMethod);
-
- String charEncoding =
- (String) msgContext.getProperty(
- MessageContext.CHARACTER_SET_ENCODING);
- if(charEncoding == null){
- charEncoding = MessageContext.DEFAULT_CHAR_SET_ENCODING;
- }
-
- postMethod.setRequestEntity(
- new AxisRequestEntity(
- dataout,
- chuncked,
- msgContext.isDoingMTOM(),
- charEncoding));
-
- if (!httpVersion.equals(HTTPConstants.HEADER_PROTOCOL_10)
- && chuncked) {
- postMethod.setContentChunked(true);
- }
- postMethod.setRequestHeader(
- HTTPConstants.HEADER_USER_AGENT,
- "Axis/2.0");
- if (!msgContext.isDoingREST()) {
- postMethod.setRequestHeader(
- HTTPConstants.HEADER_SOAP_ACTION,
- soapActionString);
- }
- postMethod.setRequestHeader(HTTPConstants.HEADER_HOST, url.getHost());
- if (httpVersion != null) {
- if (httpVersion.equals(HTTPConstants.HEADER_PROTOCOL_10)) {
- //postMethod.setHttp11(false); todo method to findout the transport version...
- //allowing keep-alive for 1.0
- postMethod.setRequestHeader(
- HTTPConstants.HEADER_CONNECTION,
- HTTPConstants.HEADER_CONNECTION_KEEPALIVE);
- } else {
- // allowing keep-alive for 1.1
- postMethod.setRequestHeader(
- HTTPConstants.HEADER_CONNECTION,
- HTTPConstants.HEADER_CONNECTION_KEEPALIVE);
- postMethod.setRequestHeader(
- HTTPConstants.HEADER_EXPECT,
- HTTPConstants.HEADER_EXPECT_100_Continue);
- }
- }
-
- this.httpClient.executeMethod(postMethod);
-
- if (postMethod.getStatusCode() == HttpStatus.SC_OK) {
- processResponse(postMethod, msgContext);
- } else if (postMethod.getStatusCode() == HttpStatus.SC_ACCEPTED) {
- return;
- } else if (postMethod.getStatusCode() == HttpStatus.SC_INTERNAL_SERVER_ERROR){
-
- Header contenttypeHheader = postMethod.getResponseHeader(
- HTTPConstants.HEADER_CONTENT_TYPE);
-
- String value = contenttypeHheader.getValue();
- if(value != null){
- if(value.indexOf(SOAP11Constants.SOAP_11_CONTENT_TYPE)>=0||
- value.indexOf(SOAP12Constants.SOAP_12_CONTENT_TYPE) >=0){
- processResponse(postMethod, msgContext);
- }
- }
- }else{
- throw new AxisFault(
- Messages.getMessage(
- "transportError",
- String.valueOf(postMethod.getStatusCode()),
- postMethod.getResponseBodyAsString()));
- }
-
- }
-
- private void processResponse(HttpMethodBase httpMethod, MessageContext msgContext) throws IOException {
- obatainHTTPHeaderInformation(httpMethod, msgContext);
- InputStream in = httpMethod.getResponseBodyAsStream();
- if (in == null) {
- throw new AxisFault(
- Messages.getMessage("canNotBeNull", "InputStream"));
- }
- msgContext.getOperationContext().setProperty(
- MessageContext.TRANSPORT_IN,
- in);
- }
-
- private void transportConfigurationGET(MessageContext msgContext, URL url)
- throws MalformedURLException, AxisFault, IOException {
- GetMethod getMethod = new GetMethod();
- getMethod.setPath(url.getFile());
-
- String charEncoding =
- (String) msgContext.getProperty(
- MessageContext.CHARACTER_SET_ENCODING);
- if (charEncoding == null) //Default encoding scheme
- getMethod.setRequestHeader(
- HTTPConstants.HEADER_CONTENT_TYPE,
- "text/xml; charset="
- + MessageContext.DEFAULT_CHAR_SET_ENCODING);
- else
- getMethod.setRequestHeader(
- HTTPConstants.HEADER_CONTENT_TYPE,
- "text/xml; charset=" + charEncoding);
-
- this.httpClient = new HttpClient();
- HostConfiguration hostConfig =
- this.getHostConfiguration(msgContext, url);
-
- this.httpClient.executeMethod(hostConfig, getMethod);
-
- if (getMethod.getStatusCode() == HttpStatus.SC_OK) {
- processResponse(getMethod, msgContext);
-
-// obatainHTTPHeaderInformation(getMethod, msgContext);
-//
-// InputStream in = getMethod.getResponseBodyAsStream();
-// if (in == null) {
-// throw new AxisFault(
-// Messages.getMessage("canNotBeNull", "InputStream"));
-// }
-// msgContext.getOperationContext().setProperty(
-// MessageContext.TRANSPORT_IN,
-// in);
- } else if (getMethod.getStatusCode() == HttpStatus.SC_ACCEPTED) {
- return;
- }else if (getMethod.getStatusCode() == HttpStatus.SC_INTERNAL_SERVER_ERROR){
-
- Header contenttypeHheader = getMethod.getResponseHeader(
- HTTPConstants.HEADER_CONTENT_TYPE);
-
- String value = contenttypeHheader.getValue();
- if(value != null){
- if(value.indexOf(SOAP11Constants.SOAP_11_CONTENT_TYPE)>=0||
- value.indexOf(SOAP12Constants.SOAP_12_CONTENT_TYPE) >=0){
- processResponse(getMethod, msgContext);
- }
-
- }
- }else{
- throw new AxisFault(
- Messages.getMessage(
- "transportError",
- String.valueOf(getMethod.getStatusCode()),
- getMethod.getResponseBodyAsString()));
- }
- }
-
- /**
- * Collect the HTTP header information and set them in the message context
- * @param method
- * @param msgContext
- */
- private void obatainHTTPHeaderInformation(HttpMethodBase method,MessageContext msgContext) {
- Header header =
- method.getResponseHeader(HTTPConstants.HEADER_CONTENT_TYPE);
- if (header != null) {
- HeaderElement[] headers = header.getElements();
- for (int i = 0; i < headers.length; i++) {
- NameValuePair charsetEnc = headers[i]
- .getParameterByName(HTTPConstants.CHAR_SET_ENCODING);
- if (headers[i]
- .getName()
- .equals(
- HTTPConstants.HEADER_ACCEPT_MULTIPART_RELATED)) {
- OperationContext opContext =
- msgContext.getOperationContext();
- if (opContext != null) {
- opContext.setProperty(
- HTTPConstants.MTOM_RECIVED_CONTENT_TYPE,
- header.getValue());
- }
- } else if (charsetEnc != null) {
-
- msgContext
- .setProperty(
- MessageContext.CHARACTER_SET_ENCODING,
- charsetEnc);
- }
- }
- }
-
- }
-
+
+ PostMethod postMethod = new PostMethod(url.toString());
+ postMethod.setPath(url.getFile());
+
+ msgContext.setProperty(HTTP_METHOD, postMethod);
+
+ String charEncoding =
+ (String) msgContext.getProperty(
+ MessageContext.CHARACTER_SET_ENCODING);
+ if(charEncoding == null){
+ charEncoding = MessageContext.DEFAULT_CHAR_SET_ENCODING;
+ }
+
+ postMethod.setRequestEntity(
+ new AxisRequestEntity(
+ dataout,
+ chuncked,
+ msgContext.isDoingMTOM(),
+ charEncoding));
+
+ if (!httpVersion.equals(HTTPConstants.HEADER_PROTOCOL_10)
+ && chuncked) {
+ postMethod.setContentChunked(true);
+ }
+ postMethod.setRequestHeader(
+ HTTPConstants.HEADER_USER_AGENT,
+ "Axis/2.0");
+ if (!msgContext.isDoingREST()) {
+ postMethod.setRequestHeader(
+ HTTPConstants.HEADER_SOAP_ACTION,
+ soapActionString);
+ }
+ postMethod.setRequestHeader(HTTPConstants.HEADER_HOST, url.getHost());
+ if (httpVersion != null) {
+ if (httpVersion.equals(HTTPConstants.HEADER_PROTOCOL_10)) {
+ //postMethod.setHttp11(false); todo method to findout the transport version...
+ //allowing keep-alive for 1.0
+ postMethod.setRequestHeader(
+ HTTPConstants.HEADER_CONNECTION,
+ HTTPConstants.HEADER_CONNECTION_KEEPALIVE);
+ } else {
+ // allowing keep-alive for 1.1
+ postMethod.setRequestHeader(
+ HTTPConstants.HEADER_CONNECTION,
+ HTTPConstants.HEADER_CONNECTION_KEEPALIVE);
+ postMethod.setRequestHeader(
+ HTTPConstants.HEADER_EXPECT,
+ HTTPConstants.HEADER_EXPECT_100_Continue);
+ }
+ }
+
+ this.httpClient.executeMethod(postMethod);
+
+ if (postMethod.getStatusCode() == HttpStatus.SC_OK) {
+ processResponse(postMethod, msgContext);
+ } else if (postMethod.getStatusCode() == HttpStatus.SC_ACCEPTED) {
+ return;
+ } else if (postMethod.getStatusCode() == HttpStatus.SC_INTERNAL_SERVER_ERROR){
+
+ Header contenttypeHheader = postMethod.getResponseHeader(
+ HTTPConstants.HEADER_CONTENT_TYPE);
+
+ String value = contenttypeHheader.getValue();
+ if(value != null){
+ if(value.indexOf(SOAP11Constants.SOAP_11_CONTENT_TYPE)>=0||
+ value.indexOf(SOAP12Constants.SOAP_12_CONTENT_TYPE) >=0){
+ processResponse(postMethod, msgContext);
+ }
+ }
+ }else{
+ throw new AxisFault(
+ Messages.getMessage(
+ "transportError",
+ String.valueOf(postMethod.getStatusCode()),
+ postMethod.getResponseBodyAsString()));
+ }
+
+ }
+
+ private void processResponse(HttpMethodBase httpMethod, MessageContext msgContext) throws IOException {
+ obatainHTTPHeaderInformation(httpMethod, msgContext);
+ InputStream in = httpMethod.getResponseBodyAsStream();
+ if (in == null) {
+ throw new AxisFault(
+ Messages.getMessage("canNotBeNull", "InputStream"));
+ }
+ msgContext.getOperationContext().setProperty(
+ MessageContext.TRANSPORT_IN,
+ in);
+ }
+
+ private void transportConfigurationGET(MessageContext msgContext, URL url)
+ throws MalformedURLException, AxisFault, IOException {
+ GetMethod getMethod = new GetMethod();
+ getMethod.setPath(url.getFile());
+
+ String charEncoding =
+ (String) msgContext.getProperty(
+ MessageContext.CHARACTER_SET_ENCODING);
+ if (charEncoding == null) //Default encoding scheme
+ getMethod.setRequestHeader(
+ HTTPConstants.HEADER_CONTENT_TYPE,
+ "text/xml; charset="
+ + MessageContext.DEFAULT_CHAR_SET_ENCODING);
+ else
+ getMethod.setRequestHeader(
+ HTTPConstants.HEADER_CONTENT_TYPE,
+ "text/xml; charset=" + charEncoding);
+
+ this.httpClient = new HttpClient();
+ HostConfiguration hostConfig =
+ this.getHostConfiguration(msgContext, url);
+
+ this.httpClient.executeMethod(hostConfig, getMethod);
+
+ if (getMethod.getStatusCode() == HttpStatus.SC_OK) {
+ processResponse(getMethod, msgContext);
+
+// obatainHTTPHeaderInformation(getMethod, msgContext);
+//
+// InputStream in = getMethod.getResponseBodyAsStream();
+// if (in == null) {
+// throw new AxisFault(
+// Messages.getMessage("canNotBeNull", "InputStream"));
+// }
+// msgContext.getOperationContext().setProperty(
+// MessageContext.TRANSPORT_IN,
+// in);
+ } else if (getMethod.getStatusCode() == HttpStatus.SC_ACCEPTED) {
+ return;
+ }else if (getMethod.getStatusCode() == HttpStatus.SC_INTERNAL_SERVER_ERROR){
+
+ Header contenttypeHheader = getMethod.getResponseHeader(
+ HTTPConstants.HEADER_CONTENT_TYPE);
+
+ String value = contenttypeHheader.getValue();
+ if(value != null){
+ if(value.indexOf(SOAP11Constants.SOAP_11_CONTENT_TYPE)>=0||
+ value.indexOf(SOAP12Constants.SOAP_12_CONTENT_TYPE) >=0){
+ processResponse(getMethod, msgContext);
+ }
+
+ }
+ }else{
+ throw new AxisFault(
+ Messages.getMessage(
+ "transportError",
+ String.valueOf(getMethod.getStatusCode()),
+ getMethod.getResponseBodyAsString()));
+ }
+ }
+
+ /**
+ * Collect the HTTP header information and set them in the message context
+ * @param method
+ * @param msgContext
+ */
+ private void obatainHTTPHeaderInformation(HttpMethodBase method,MessageContext msgContext) {
+ Header header =
+ method.getResponseHeader(HTTPConstants.HEADER_CONTENT_TYPE);
+ if (header != null) {
+ HeaderElement[] headers = header.getElements();
+ for (int i = 0; i < headers.length; i++) {
+ NameValuePair charsetEnc = headers[i]
+ .getParameterByName(HTTPConstants.CHAR_SET_ENCODING);
+ if (headers[i]
+ .getName()
+ .equalsIgnoreCase(
+ HTTPConstants.HEADER_ACCEPT_MULTIPART_RELATED)) {
+ OperationContext opContext =
+ msgContext.getOperationContext();
+ if (opContext != null) {
+ opContext.setProperty(
+ HTTPConstants.MTOM_RECIVED_CONTENT_TYPE,
+ header.getValue());
+ }
+ } else if (charsetEnc != null) {
+
+ msgContext
+ .setProperty(
+ MessageContext.CHARACTER_SET_ENCODING,
+ charsetEnc);
+ }
+ }
+ }
+
+ }
+
}
Re: svn commit: r234467 - /webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/http/CommonsHTTPTransportSender.java
Posted by Davanum Srinivas <da...@gmail.com>.
Thilina,
Sigh!!! what was the change here? Please be careful next time...can't
review changes because of the formatting changes.
-- dims
On 8/22/05, thilina@apache.org <th...@apache.org> wrote:
> Author: thilina
> Date: Mon Aug 22 03:53:40 2005
> New Revision: 234467
>
> URL: http://svn.apache.org/viewcvs?rev=234467&view=rev
> Log:
> fixing support for "*m*ultipart/*r*elated"
>
> Modified:
> webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/http/CommonsHTTPTransportSender.java
>
> Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/http/CommonsHTTPTransportSender.java
> URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/http/CommonsHTTPTransportSender.java?rev=234467&r1=234466&r2=234467&view=diff
> ==============================================================================
> --- webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/http/CommonsHTTPTransportSender.java (original)
> +++ webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/http/CommonsHTTPTransportSender.java Mon Aug 22 03:53:40 2005
> @@ -1,543 +1,543 @@
> -/*
> -* Copyright 2004,2005 The Apache Software Foundation.
> -*
> -* Licensed under the Apache License, Version 2.0 (the "License"); you may not
> -* use this file except in compliance with the License. You may obtain a copy of
> -* the License at
> -*
> -* http://www.apache.org/licenses/LICENSE-2.0
> -*
> -* Unless required by applicable law or agreed to in writing, software
> -* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
> -* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
> -* License for the specific language governing permissions and limitations under
> -* the License.
> -*/
> -
> -package org.apache.axis2.transport.http;
> -
> -import org.apache.axis2.AxisFault;
> -import org.apache.axis2.Constants;
> -import org.apache.axis2.soap.SOAP11Constants;
> -import org.apache.axis2.soap.SOAP12Constants;
> -import org.apache.axis2.addressing.AddressingConstants;
> -import org.apache.axis2.addressing.EndpointReference;
> -import org.apache.axis2.context.ConfigurationContext;
> -import org.apache.axis2.context.MessageContext;
> -import org.apache.axis2.context.OperationContext;
> -import org.apache.axis2.description.Parameter;
> -import org.apache.axis2.description.TransportOutDescription;
> -import org.apache.axis2.handlers.AbstractHandler;
> -import org.apache.axis2.i18n.Messages;
> -import org.apache.axis2.om.OMElement;
> -import org.apache.axis2.om.impl.OMOutputImpl;
> -import org.apache.axis2.transport.TransportSender;
> -import org.apache.commons.httpclient.*;
> -import org.apache.commons.httpclient.methods.GetMethod;
> -import org.apache.commons.httpclient.methods.PostMethod;
> -import org.apache.commons.httpclient.methods.RequestEntity;
> -
> -import javax.xml.stream.FactoryConfigurationError;
> -import javax.xml.stream.XMLOutputFactory;
> -import javax.xml.stream.XMLStreamException;
> -import javax.xml.stream.XMLStreamWriter;
> -import java.io.ByteArrayOutputStream;
> -import java.io.IOException;
> -import java.io.InputStream;
> -import java.io.OutputStream;
> -import java.net.MalformedURLException;
> -import java.net.URL;
> -
> -public class CommonsHTTPTransportSender
> - extends AbstractHandler
> - implements TransportSender {
> - private boolean chuncked = false;
> -
> - private String httpVersion = HTTPConstants.HEADER_PROTOCOL_11;
> -
> - public static final String HTTP_METHOD = "HTTP_METHOD";
> -
> - protected HttpClient httpClient;
> -
> - protected OMElement outputMessage;
> -
> - protected OMOutputImpl omOutput = new OMOutputImpl();
> -
> - public CommonsHTTPTransportSender() {
> - } //default
> -
> - public void invoke(MessageContext msgContext) throws AxisFault {
> - try {
> - String charSetEnc =
> - (String) msgContext.getProperty(
> - MessageContext.CHARACTER_SET_ENCODING);
> - if (charSetEnc != null) {
> - omOutput.setCharSetEncoding(charSetEnc);
> - } else {
> - OperationContext opctx = msgContext.getOperationContext();
> - if(opctx != null) {
> - charSetEnc = (String)opctx.getProperty(MessageContext.CHARACTER_SET_ENCODING);
> - } else {
> - charSetEnc = MessageContext.DEFAULT_CHAR_SET_ENCODING;
> - }
> - }
> - msgContext.setDoingMTOM(HTTPTransportUtils.doWriteMTOM(msgContext));
> - omOutput.setSoap11(msgContext.isSOAP11());
> - omOutput.setDoOptimize(msgContext.isDoingMTOM());
> -
> - //Check for the REST behaviour, if you desire rest beahaviour
> - //put a <parameter name="doREST" value="true"/> at the
> - // server.xml/client.xml file
> - EndpointReference epr = null;
> - if (msgContext.getTo() != null
> - && !AddressingConstants.Submission.WSA_ANONYMOUS_URL.equals(
> - msgContext.getTo().getAddress())
> - && !AddressingConstants.Final.WSA_ANONYMOUS_URL.equals(
> - msgContext.getTo().getAddress())) {
> - epr = msgContext.getTo();
> - }
> -
> - OMElement dataOut;
> - if (msgContext.isDoingREST()) {
> - dataOut = msgContext.getEnvelope().getBody().getFirstElement();
> - } else {
> - dataOut = msgContext.getEnvelope();
> - }
> -
> - //TODO timeout, configuration
> - if (epr != null) {
> - writeMessageWithCommons(msgContext, epr, dataOut);
> - } else {
> - OutputStream out =
> - (OutputStream) msgContext.getProperty(
> - MessageContext.TRANSPORT_OUT);
> - if (msgContext.isServerSide()) {
> - HTTPOutTransportInfo transportInfo =
> - (HTTPOutTransportInfo) msgContext.getProperty(
> - HTTPConstants.HTTPOutTransportInfo);
> - if (transportInfo != null) {
> - omOutput.setSoap11(msgContext.isSOAP11());
> - transportInfo.setContentType(omOutput.getContentType());
> - }else{
> - throw new AxisFault(HTTPConstants.HTTPOutTransportInfo + " does not set");
> - }
> - }
> - omOutput.setOutputStream(out, msgContext.isDoingMTOM());
> - dataOut.serialize(omOutput);
> - omOutput.flush();
> - }
> - if(msgContext.getOperationContext() != null){
> - msgContext.getOperationContext().setProperty(
> - Constants.RESPONSE_WRITTEN,
> - Constants.VALUE_TRUE);
> - }
> - } catch (XMLStreamException e) {
> - throw new AxisFault(e);
> - } catch (FactoryConfigurationError e) {
> - throw new AxisFault(e);
> - } catch (IOException e) {
> - throw new AxisFault(e);
> - }
> - }
> -
> - public void writeMessageWithToOutPutStream(
> - MessageContext msgContext,
> - OutputStream out) {
> -
> - }
> -
> - public void writeMessageWithCommons(
> - MessageContext msgContext,
> - EndpointReference toURL,
> - OMElement dataout)
> - throws AxisFault {
> - try {
> - URL url = new URL(toURL.getAddress());
> -
> - String soapActionString = msgContext.getSoapAction();
> - if (soapActionString == null || soapActionString.length() == 0) {
> - soapActionString = msgContext.getWSAAction();
> - }
> - if (soapActionString == null) {
> - soapActionString = "";
> - }
> - //supporting RESTFacility..
> -
> - if (!msgContext.isDoingREST()) {
> - this.transportConfigurationPOST(
> - msgContext,
> - dataout,
> - url,
> - soapActionString);
> - }
> - if (msgContext.isDoingREST()) {
> - if (msgContext.isRestThroughPOST()) {
> - this.transportConfigurationPOST(
> - msgContext,
> - dataout,
> - url,
> - soapActionString);
> - } else {
> - this.transportConfigurationGET(msgContext, url);
> - }
> - }
> - } catch (MalformedURLException e) {
> - throw new AxisFault(e);
> - } catch (HttpException e) {
> - throw new AxisFault(e);
> - } catch (IOException e) {
> - throw new AxisFault(e);
> - }
> -
> - }
> - protected HostConfiguration getHostConfiguration(
> - MessageContext context,
> - URL targetURL) {
> - //TODO cheaking wheather the host is a proxy
> - HostConfiguration config = new HostConfiguration();
> - config.setHost(
> - targetURL.getHost(),
> - targetURL.getPort() == -1 ? 80 : targetURL.getPort());
> - return config;
> - }
> -
> - //get the contentLength...
> - public class AxisRequestEntity implements RequestEntity {
> -
> - private String charSetEnc;
> -
> - private OMElement element;
> -
> - private boolean chuncked;
> -
> - private byte[] bytes;
> -
> - private boolean doingMTOM = false;
> -
> - public AxisRequestEntity(
> - OMElement element,
> - boolean chuncked,
> - boolean doingMTOM,
> - String charSetEncoding) {
> - this.element = element;
> - this.chuncked = chuncked;
> - this.doingMTOM = doingMTOM;
> - this.charSetEnc = charSetEncoding;
> - }
> -
> - public boolean isRepeatable() {
> - return true;
> - }
> -
> - public byte[] writeBytes() throws AxisFault {
> - try {
> - ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();
> - XMLStreamWriter outputWriter =
> - XMLOutputFactory.newInstance().createXMLStreamWriter(
> - bytesOut,
> - charSetEnc);
> - element.serialize(outputWriter);
> - outputWriter.flush();
> - return bytesOut.toByteArray();
> - } catch (XMLStreamException e) {
> - throw new AxisFault(e);
> - } catch (FactoryConfigurationError e) {
> - throw new AxisFault(e);
> - }
> - }
> -
> - public void writeRequest(OutputStream out) throws IOException {
> - try {
> - if (chuncked || doingMTOM) {
> - omOutput.setOutputStream(out, doingMTOM);
> - element.serialize(omOutput);
> - omOutput.flush();
> -
> - } else {
> - if (bytes == null) {
> - bytes = writeBytes();
> - }
> - out.write(bytes);
> - }
> - out.flush();
> - } catch (XMLStreamException e) {
> - throw new AxisFault(e);
> - } catch (FactoryConfigurationError e) {
> - throw new AxisFault(e);
> - } catch (IOException e) {
> - throw new AxisFault(e);
> - }
> - }
> -
> - public long getContentLength() {
> - try {
> - if (chuncked || doingMTOM) {
> - return -1;
> - } else {
> - if (bytes == null) {
> - bytes = writeBytes();
> - }
> - return bytes.length;
> - }
> - } catch (AxisFault e) {
> - return -1;
> - }
> - }
> -
> - public String getContentType() {
> - return omOutput.getContentType();
> - }
> - }
> -
> - /*
> - * (non-Javadoc)
> - *
> - * @see org.apache.axis2.transport.TransportSender#cleanUp(org.apache.axis2.context.MessageContext)
> - */
> - public void cleanUp(MessageContext msgContext) throws AxisFault {
> - HttpMethod httpMethod =
> - (HttpMethod) msgContext.getProperty(HTTP_METHOD);
> - if (httpMethod != null) {
> - httpMethod.releaseConnection();
> - }
> -
> - }
> -
> - public void init(
> - ConfigurationContext confContext,
> - TransportOutDescription transportOut)
> - throws AxisFault {
> - //<parameter name="PROTOCOL" locked="xsd:false">HTTP/1.0</parameter> or
> - //<parameter name="PROTOCOL" locked="xsd:false">HTTP/1.1</parameter> is
> - // checked
> - Parameter version =
> - transportOut.getParameter(HTTPConstants.PROTOCOL_VERSION);
> - if (version != null) {
> - if (HTTPConstants.HEADER_PROTOCOL_11.equals(version.getValue())) {
> - this.httpVersion = HTTPConstants.HEADER_PROTOCOL_11;
> - Parameter transferEncoding =
> - transportOut.getParameter(
> - HTTPConstants.HEADER_TRANSFER_ENCODING);
> - if (transferEncoding != null
> - && HTTPConstants.HEADER_TRANSFER_ENCODING_CHUNKED.equals(
> - transferEncoding.getValue())) {
> - this.chuncked = true;
> - }
> - } else if (
> - HTTPConstants.HEADER_PROTOCOL_10.equals(version.getValue())) {
> - this.httpVersion = HTTPConstants.HEADER_PROTOCOL_10;
> - } else {
> - throw new AxisFault(
> - "Parameter "
> - + HTTPConstants.PROTOCOL_VERSION
> - + " Can have values only HTTP/1.0 or HTTP/1.1");
> - }
> - }
> -
> - }
> -
> - private void transportConfigurationPOST(
> - MessageContext msgContext,
> - OMElement dataout,
> - URL url,
> - String soapActionString)
> - throws MalformedURLException, AxisFault, IOException {
> -
> - //execuite the HtttpMethodBase - a connection manager can be given for handle multiple
> - httpClient = new HttpClient();
> - //hostConfig handles the socket functions..
> - //HostConfiguration hostConfig = getHostConfiguration(msgContext, url);
> +/*
>
> +* Copyright 2004,2005 The Apache Software Foundation.
>
> +*
>
> +* Licensed under the Apache License, Version 2.0 (the "License"); you may not
>
> +* use this file except in compliance with the License. You may obtain a copy of
>
> +* the License at
>
> +*
>
> +* http://www.apache.org/licenses/LICENSE-2.0
>
> +*
>
> +* Unless required by applicable law or agreed to in writing, software
>
> +* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
>
> +* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
>
> +* License for the specific language governing permissions and limitations under
>
> +* the License.
>
> +*/
>
> +
>
> +package org.apache.axis2.transport.http;
>
> +
>
> +import org.apache.axis2.AxisFault;
>
> +import org.apache.axis2.Constants;
>
> +import org.apache.axis2.soap.SOAP11Constants;
>
> +import org.apache.axis2.soap.SOAP12Constants;
>
> +import org.apache.axis2.addressing.AddressingConstants;
>
> +import org.apache.axis2.addressing.EndpointReference;
>
> +import org.apache.axis2.context.ConfigurationContext;
>
> +import org.apache.axis2.context.MessageContext;
>
> +import org.apache.axis2.context.OperationContext;
>
> +import org.apache.axis2.description.Parameter;
>
> +import org.apache.axis2.description.TransportOutDescription;
>
> +import org.apache.axis2.handlers.AbstractHandler;
>
> +import org.apache.axis2.i18n.Messages;
>
> +import org.apache.axis2.om.OMElement;
>
> +import org.apache.axis2.om.impl.OMOutputImpl;
>
> +import org.apache.axis2.transport.TransportSender;
>
> +import org.apache.commons.httpclient.*;
>
> +import org.apache.commons.httpclient.methods.GetMethod;
>
> +import org.apache.commons.httpclient.methods.PostMethod;
>
> +import org.apache.commons.httpclient.methods.RequestEntity;
>
> +
>
> +import javax.xml.stream.FactoryConfigurationError;
>
> +import javax.xml.stream.XMLOutputFactory;
>
> +import javax.xml.stream.XMLStreamException;
>
> +import javax.xml.stream.XMLStreamWriter;
>
> +import java.io.ByteArrayOutputStream;
>
> +import java.io.IOException;
>
> +import java.io.InputStream;
>
> +import java.io.OutputStream;
>
> +import java.net.MalformedURLException;
>
> +import java.net.URL;
>
> +
>
> +public class CommonsHTTPTransportSender
>
> + extends AbstractHandler
>
> + implements TransportSender {
>
> + private boolean chuncked = false;
>
> +
>
> + private String httpVersion = HTTPConstants.HEADER_PROTOCOL_11;
>
> +
>
> + public static final String HTTP_METHOD = "HTTP_METHOD";
>
> +
>
> + protected HttpClient httpClient;
>
> +
>
> + protected OMElement outputMessage;
>
> +
>
> + protected OMOutputImpl omOutput = new OMOutputImpl();
>
> +
>
> + public CommonsHTTPTransportSender() {
>
> + } //default
>
> +
>
> + public void invoke(MessageContext msgContext) throws AxisFault {
>
> + try {
>
> + String charSetEnc =
>
> + (String) msgContext.getProperty(
>
> + MessageContext.CHARACTER_SET_ENCODING);
>
> + if (charSetEnc != null) {
>
> + omOutput.setCharSetEncoding(charSetEnc);
>
> + } else {
>
> + OperationContext opctx = msgContext.getOperationContext();
>
> + if(opctx != null) {
>
> + charSetEnc = (String)opctx.getProperty(MessageContext.CHARACTER_SET_ENCODING);
>
> + } else {
>
> + charSetEnc = MessageContext.DEFAULT_CHAR_SET_ENCODING;
>
> + }
>
> + }
>
> + msgContext.setDoingMTOM(HTTPTransportUtils.doWriteMTOM(msgContext));
>
> + omOutput.setSoap11(msgContext.isSOAP11());
>
> + omOutput.setDoOptimize(msgContext.isDoingMTOM());
>
> +
>
> + //Check for the REST behaviour, if you desire rest beahaviour
>
> + //put a <parameter name="doREST" value="true"/> at the
>
> + // server.xml/client.xml file
>
> + EndpointReference epr = null;
>
> + if (msgContext.getTo() != null
>
> + && !AddressingConstants.Submission.WSA_ANONYMOUS_URL.equals(
>
> + msgContext.getTo().getAddress())
>
> + && !AddressingConstants.Final.WSA_ANONYMOUS_URL.equals(
>
> + msgContext.getTo().getAddress())) {
>
> + epr = msgContext.getTo();
>
> + }
>
> +
>
> + OMElement dataOut;
>
> + if (msgContext.isDoingREST()) {
>
> + dataOut = msgContext.getEnvelope().getBody().getFirstElement();
>
> + } else {
>
> + dataOut = msgContext.getEnvelope();
>
> + }
>
> +
>
> + //TODO timeout, configuration
>
> + if (epr != null) {
>
> + writeMessageWithCommons(msgContext, epr, dataOut);
>
> + } else {
>
> + OutputStream out =
>
> + (OutputStream) msgContext.getProperty(
>
> + MessageContext.TRANSPORT_OUT);
>
> + if (msgContext.isServerSide()) {
>
> + HTTPOutTransportInfo transportInfo =
>
> + (HTTPOutTransportInfo) msgContext.getProperty(
>
> + HTTPConstants.HTTPOutTransportInfo);
>
> + if (transportInfo != null) {
>
> + omOutput.setSoap11(msgContext.isSOAP11());
>
> + transportInfo.setContentType(omOutput.getContentType());
>
> + }else{
>
> + throw new AxisFault(HTTPConstants.HTTPOutTransportInfo + " does not set");
>
> + }
>
> + }
>
> + omOutput.setOutputStream(out, msgContext.isDoingMTOM());
>
> + dataOut.serialize(omOutput);
>
> + omOutput.flush();
>
> + }
>
> + if(msgContext.getOperationContext() != null){
>
> + msgContext.getOperationContext().setProperty(
>
> + Constants.RESPONSE_WRITTEN,
>
> + Constants.VALUE_TRUE);
>
> + }
>
> + } catch (XMLStreamException e) {
>
> + throw new AxisFault(e);
>
> + } catch (FactoryConfigurationError e) {
>
> + throw new AxisFault(e);
>
> + } catch (IOException e) {
>
> + throw new AxisFault(e);
>
> + }
>
> + }
>
> +
>
> + public void writeMessageWithToOutPutStream(
>
> + MessageContext msgContext,
>
> + OutputStream out) {
>
> +
>
> + }
>
> +
>
> + public void writeMessageWithCommons(
>
> + MessageContext msgContext,
>
> + EndpointReference toURL,
>
> + OMElement dataout)
>
> + throws AxisFault {
>
> + try {
>
> + URL url = new URL(toURL.getAddress());
>
> +
>
> + String soapActionString = msgContext.getSoapAction();
>
> + if (soapActionString == null || soapActionString.length() == 0) {
>
> + soapActionString = msgContext.getWSAAction();
>
> + }
>
> + if (soapActionString == null) {
>
> + soapActionString = "";
>
> + }
>
> + //supporting RESTFacility..
>
> +
>
> + if (!msgContext.isDoingREST()) {
>
> + this.transportConfigurationPOST(
>
> + msgContext,
>
> + dataout,
>
> + url,
>
> + soapActionString);
>
> + }
>
> + if (msgContext.isDoingREST()) {
>
> + if (msgContext.isRestThroughPOST()) {
>
> + this.transportConfigurationPOST(
>
> + msgContext,
>
> + dataout,
>
> + url,
>
> + soapActionString);
>
> + } else {
>
> + this.transportConfigurationGET(msgContext, url);
>
> + }
>
> + }
>
> + } catch (MalformedURLException e) {
>
> + throw new AxisFault(e);
>
> + } catch (HttpException e) {
>
> + throw new AxisFault(e);
>
> + } catch (IOException e) {
>
> + throw new AxisFault(e);
>
> + }
>
> +
>
> + }
>
> + protected HostConfiguration getHostConfiguration(
>
> + MessageContext context,
>
> + URL targetURL) {
>
> + //TODO cheaking wheather the host is a proxy
>
> + HostConfiguration config = new HostConfiguration();
>
> + config.setHost(
>
> + targetURL.getHost(),
>
> + targetURL.getPort() == -1 ? 80 : targetURL.getPort());
>
> + return config;
>
> + }
>
> +
>
> + //get the contentLength...
>
> + public class AxisRequestEntity implements RequestEntity {
>
> +
>
> + private String charSetEnc;
>
> +
>
> + private OMElement element;
>
> +
>
> + private boolean chuncked;
>
> +
>
> + private byte[] bytes;
>
> +
>
> + private boolean doingMTOM = false;
>
> +
>
> + public AxisRequestEntity(
>
> + OMElement element,
>
> + boolean chuncked,
>
> + boolean doingMTOM,
>
> + String charSetEncoding) {
>
> + this.element = element;
>
> + this.chuncked = chuncked;
>
> + this.doingMTOM = doingMTOM;
>
> + this.charSetEnc = charSetEncoding;
>
> + }
>
> +
>
> + public boolean isRepeatable() {
>
> + return true;
>
> + }
>
> +
>
> + public byte[] writeBytes() throws AxisFault {
>
> + try {
>
> + ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();
>
> + XMLStreamWriter outputWriter =
>
> + XMLOutputFactory.newInstance().createXMLStreamWriter(
>
> + bytesOut,
>
> + charSetEnc);
>
> + element.serialize(outputWriter);
>
> + outputWriter.flush();
>
> + return bytesOut.toByteArray();
>
> + } catch (XMLStreamException e) {
>
> + throw new AxisFault(e);
>
> + } catch (FactoryConfigurationError e) {
>
> + throw new AxisFault(e);
>
> + }
>
> + }
>
> +
>
> + public void writeRequest(OutputStream out) throws IOException {
>
> + try {
>
> + if (chuncked || doingMTOM) {
>
> + omOutput.setOutputStream(out, doingMTOM);
>
> + element.serialize(omOutput);
>
> + omOutput.flush();
>
> +
>
> + } else {
>
> + if (bytes == null) {
>
> + bytes = writeBytes();
>
> + }
>
> + out.write(bytes);
>
> + }
>
> + out.flush();
>
> + } catch (XMLStreamException e) {
>
> + throw new AxisFault(e);
>
> + } catch (FactoryConfigurationError e) {
>
> + throw new AxisFault(e);
>
> + } catch (IOException e) {
>
> + throw new AxisFault(e);
>
> + }
>
> + }
>
> +
>
> + public long getContentLength() {
>
> + try {
>
> + if (chuncked || doingMTOM) {
>
> + return -1;
>
> + } else {
>
> + if (bytes == null) {
>
> + bytes = writeBytes();
>
> + }
>
> + return bytes.length;
>
> + }
>
> + } catch (AxisFault e) {
>
> + return -1;
>
> + }
>
> + }
>
> +
>
> + public String getContentType() {
>
> + return omOutput.getContentType();
>
> + }
>
> + }
>
> +
>
> + /*
>
> + * (non-Javadoc)
>
> + *
>
> + * @see org.apache.axis2.transport.TransportSender#cleanUp(org.apache.axis2.context.MessageContext)
>
> + */
>
> + public void cleanUp(MessageContext msgContext) throws AxisFault {
>
> + HttpMethod httpMethod =
>
> + (HttpMethod) msgContext.getProperty(HTTP_METHOD);
>
> + if (httpMethod != null) {
>
> + httpMethod.releaseConnection();
>
> + }
>
> +
>
> + }
>
> +
>
> + public void init(
>
> + ConfigurationContext confContext,
>
> + TransportOutDescription transportOut)
>
> + throws AxisFault {
>
> + //<parameter name="PROTOCOL" locked="xsd:false">HTTP/1.0</parameter> or
>
> + //<parameter name="PROTOCOL" locked="xsd:false">HTTP/1.1</parameter> is
>
> + // checked
>
> + Parameter version =
>
> + transportOut.getParameter(HTTPConstants.PROTOCOL_VERSION);
>
> + if (version != null) {
>
> + if (HTTPConstants.HEADER_PROTOCOL_11.equals(version.getValue())) {
>
> + this.httpVersion = HTTPConstants.HEADER_PROTOCOL_11;
>
> + Parameter transferEncoding =
>
> + transportOut.getParameter(
>
> + HTTPConstants.HEADER_TRANSFER_ENCODING);
>
> + if (transferEncoding != null
>
> + && HTTPConstants.HEADER_TRANSFER_ENCODING_CHUNKED.equals(
>
> + transferEncoding.getValue())) {
>
> + this.chuncked = true;
>
> + }
>
> + } else if (
>
> + HTTPConstants.HEADER_PROTOCOL_10.equals(version.getValue())) {
>
> + this.httpVersion = HTTPConstants.HEADER_PROTOCOL_10;
>
> + } else {
>
> + throw new AxisFault(
>
> + "Parameter "
>
> + + HTTPConstants.PROTOCOL_VERSION
>
> + + " Can have values only HTTP/1.0 or HTTP/1.1");
>
> + }
>
> + }
>
> +
>
> + }
>
> +
>
> + private void transportConfigurationPOST(
>
> + MessageContext msgContext,
>
> + OMElement dataout,
>
> + URL url,
>
> + String soapActionString)
>
> + throws MalformedURLException, AxisFault, IOException {
>
> +
>
> + //execuite the HtttpMethodBase - a connection manager can be given for handle multiple
>
> + httpClient = new HttpClient();
>
> + //hostConfig handles the socket functions..
>
> + //HostConfiguration hostConfig = getHostConfiguration(msgContext, url);
>
>
>
> // SO_TIMEOUT -- timeout for blocking reads
>
> httpClient.getHttpConnectionManager().getParams().setSoTimeout(60000);
>
> // timeout for initial connection
>
> httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(60000);
>
> -
> - PostMethod postMethod = new PostMethod(url.toString());
> - postMethod.setPath(url.getFile());
> -
> - msgContext.setProperty(HTTP_METHOD, postMethod);
> -
> - String charEncoding =
> - (String) msgContext.getProperty(
> - MessageContext.CHARACTER_SET_ENCODING);
> - if(charEncoding == null){
> - charEncoding = MessageContext.DEFAULT_CHAR_SET_ENCODING;
> - }
> -
> - postMethod.setRequestEntity(
> - new AxisRequestEntity(
> - dataout,
> - chuncked,
> - msgContext.isDoingMTOM(),
> - charEncoding));
> -
> - if (!httpVersion.equals(HTTPConstants.HEADER_PROTOCOL_10)
> - && chuncked) {
> - postMethod.setContentChunked(true);
> - }
> - postMethod.setRequestHeader(
> - HTTPConstants.HEADER_USER_AGENT,
> - "Axis/2.0");
> - if (!msgContext.isDoingREST()) {
> - postMethod.setRequestHeader(
> - HTTPConstants.HEADER_SOAP_ACTION,
> - soapActionString);
> - }
> - postMethod.setRequestHeader(HTTPConstants.HEADER_HOST, url.getHost());
> - if (httpVersion != null) {
> - if (httpVersion.equals(HTTPConstants.HEADER_PROTOCOL_10)) {
> - //postMethod.setHttp11(false); todo method to findout the transport version...
> - //allowing keep-alive for 1.0
> - postMethod.setRequestHeader(
> - HTTPConstants.HEADER_CONNECTION,
> - HTTPConstants.HEADER_CONNECTION_KEEPALIVE);
> - } else {
> - // allowing keep-alive for 1.1
> - postMethod.setRequestHeader(
> - HTTPConstants.HEADER_CONNECTION,
> - HTTPConstants.HEADER_CONNECTION_KEEPALIVE);
> - postMethod.setRequestHeader(
> - HTTPConstants.HEADER_EXPECT,
> - HTTPConstants.HEADER_EXPECT_100_Continue);
> - }
> - }
> -
> - this.httpClient.executeMethod(postMethod);
> -
> - if (postMethod.getStatusCode() == HttpStatus.SC_OK) {
> - processResponse(postMethod, msgContext);
> - } else if (postMethod.getStatusCode() == HttpStatus.SC_ACCEPTED) {
> - return;
> - } else if (postMethod.getStatusCode() == HttpStatus.SC_INTERNAL_SERVER_ERROR){
> -
> - Header contenttypeHheader = postMethod.getResponseHeader(
> - HTTPConstants.HEADER_CONTENT_TYPE);
> -
> - String value = contenttypeHheader.getValue();
> - if(value != null){
> - if(value.indexOf(SOAP11Constants.SOAP_11_CONTENT_TYPE)>=0||
> - value.indexOf(SOAP12Constants.SOAP_12_CONTENT_TYPE) >=0){
> - processResponse(postMethod, msgContext);
> - }
> - }
> - }else{
> - throw new AxisFault(
> - Messages.getMessage(
> - "transportError",
> - String.valueOf(postMethod.getStatusCode()),
> - postMethod.getResponseBodyAsString()));
> - }
> -
> - }
> -
> - private void processResponse(HttpMethodBase httpMethod, MessageContext msgContext) throws IOException {
> - obatainHTTPHeaderInformation(httpMethod, msgContext);
> - InputStream in = httpMethod.getResponseBodyAsStream();
> - if (in == null) {
> - throw new AxisFault(
> - Messages.getMessage("canNotBeNull", "InputStream"));
> - }
> - msgContext.getOperationContext().setProperty(
> - MessageContext.TRANSPORT_IN,
> - in);
> - }
> -
> - private void transportConfigurationGET(MessageContext msgContext, URL url)
> - throws MalformedURLException, AxisFault, IOException {
> - GetMethod getMethod = new GetMethod();
> - getMethod.setPath(url.getFile());
> -
> - String charEncoding =
> - (String) msgContext.getProperty(
> - MessageContext.CHARACTER_SET_ENCODING);
> - if (charEncoding == null) //Default encoding scheme
> - getMethod.setRequestHeader(
> - HTTPConstants.HEADER_CONTENT_TYPE,
> - "text/xml; charset="
> - + MessageContext.DEFAULT_CHAR_SET_ENCODING);
> - else
> - getMethod.setRequestHeader(
> - HTTPConstants.HEADER_CONTENT_TYPE,
> - "text/xml; charset=" + charEncoding);
> -
> - this.httpClient = new HttpClient();
> - HostConfiguration hostConfig =
> - this.getHostConfiguration(msgContext, url);
> -
> - this.httpClient.executeMethod(hostConfig, getMethod);
> -
> - if (getMethod.getStatusCode() == HttpStatus.SC_OK) {
> - processResponse(getMethod, msgContext);
> -
> -// obatainHTTPHeaderInformation(getMethod, msgContext);
> -//
> -// InputStream in = getMethod.getResponseBodyAsStream();
> -// if (in == null) {
> -// throw new AxisFault(
> -// Messages.getMessage("canNotBeNull", "InputStream"));
> -// }
> -// msgContext.getOperationContext().setProperty(
> -// MessageContext.TRANSPORT_IN,
> -// in);
> - } else if (getMethod.getStatusCode() == HttpStatus.SC_ACCEPTED) {
> - return;
> - }else if (getMethod.getStatusCode() == HttpStatus.SC_INTERNAL_SERVER_ERROR){
> -
> - Header contenttypeHheader = getMethod.getResponseHeader(
> - HTTPConstants.HEADER_CONTENT_TYPE);
> -
> - String value = contenttypeHheader.getValue();
> - if(value != null){
> - if(value.indexOf(SOAP11Constants.SOAP_11_CONTENT_TYPE)>=0||
> - value.indexOf(SOAP12Constants.SOAP_12_CONTENT_TYPE) >=0){
> - processResponse(getMethod, msgContext);
> - }
> -
> - }
> - }else{
> - throw new AxisFault(
> - Messages.getMessage(
> - "transportError",
> - String.valueOf(getMethod.getStatusCode()),
> - getMethod.getResponseBodyAsString()));
> - }
> - }
> -
> - /**
> - * Collect the HTTP header information and set them in the message context
> - * @param method
> - * @param msgContext
> - */
> - private void obatainHTTPHeaderInformation(HttpMethodBase method,MessageContext msgContext) {
> - Header header =
> - method.getResponseHeader(HTTPConstants.HEADER_CONTENT_TYPE);
> - if (header != null) {
> - HeaderElement[] headers = header.getElements();
> - for (int i = 0; i < headers.length; i++) {
> - NameValuePair charsetEnc = headers[i]
> - .getParameterByName(HTTPConstants.CHAR_SET_ENCODING);
> - if (headers[i]
> - .getName()
> - .equals(
> - HTTPConstants.HEADER_ACCEPT_MULTIPART_RELATED)) {
> - OperationContext opContext =
> - msgContext.getOperationContext();
> - if (opContext != null) {
> - opContext.setProperty(
> - HTTPConstants.MTOM_RECIVED_CONTENT_TYPE,
> - header.getValue());
> - }
> - } else if (charsetEnc != null) {
> -
> - msgContext
> - .setProperty(
> - MessageContext.CHARACTER_SET_ENCODING,
> - charsetEnc);
> - }
> - }
> - }
> -
> - }
> -
> +
>
> + PostMethod postMethod = new PostMethod(url.toString());
>
> + postMethod.setPath(url.getFile());
>
> +
>
> + msgContext.setProperty(HTTP_METHOD, postMethod);
>
> +
>
> + String charEncoding =
>
> + (String) msgContext.getProperty(
>
> + MessageContext.CHARACTER_SET_ENCODING);
>
> + if(charEncoding == null){
>
> + charEncoding = MessageContext.DEFAULT_CHAR_SET_ENCODING;
>
> + }
>
> +
>
> + postMethod.setRequestEntity(
>
> + new AxisRequestEntity(
>
> + dataout,
>
> + chuncked,
>
> + msgContext.isDoingMTOM(),
>
> + charEncoding));
>
> +
>
> + if (!httpVersion.equals(HTTPConstants.HEADER_PROTOCOL_10)
>
> + && chuncked) {
>
> + postMethod.setContentChunked(true);
>
> + }
>
> + postMethod.setRequestHeader(
>
> + HTTPConstants.HEADER_USER_AGENT,
>
> + "Axis/2.0");
>
> + if (!msgContext.isDoingREST()) {
>
> + postMethod.setRequestHeader(
>
> + HTTPConstants.HEADER_SOAP_ACTION,
>
> + soapActionString);
>
> + }
>
> + postMethod.setRequestHeader(HTTPConstants.HEADER_HOST, url.getHost());
>
> + if (httpVersion != null) {
>
> + if (httpVersion.equals(HTTPConstants.HEADER_PROTOCOL_10)) {
>
> + //postMethod.setHttp11(false); todo method to findout the transport version...
>
> + //allowing keep-alive for 1.0
>
> + postMethod.setRequestHeader(
>
> + HTTPConstants.HEADER_CONNECTION,
>
> + HTTPConstants.HEADER_CONNECTION_KEEPALIVE);
>
> + } else {
>
> + // allowing keep-alive for 1.1
>
> + postMethod.setRequestHeader(
>
> + HTTPConstants.HEADER_CONNECTION,
>
> + HTTPConstants.HEADER_CONNECTION_KEEPALIVE);
>
> + postMethod.setRequestHeader(
>
> + HTTPConstants.HEADER_EXPECT,
>
> + HTTPConstants.HEADER_EXPECT_100_Continue);
>
> + }
>
> + }
>
> +
>
> + this.httpClient.executeMethod(postMethod);
>
> +
>
> + if (postMethod.getStatusCode() == HttpStatus.SC_OK) {
>
> + processResponse(postMethod, msgContext);
>
> + } else if (postMethod.getStatusCode() == HttpStatus.SC_ACCEPTED) {
>
> + return;
>
> + } else if (postMethod.getStatusCode() == HttpStatus.SC_INTERNAL_SERVER_ERROR){
>
> +
>
> + Header contenttypeHheader = postMethod.getResponseHeader(
>
> + HTTPConstants.HEADER_CONTENT_TYPE);
>
> +
>
> + String value = contenttypeHheader.getValue();
>
> + if(value != null){
>
> + if(value.indexOf(SOAP11Constants.SOAP_11_CONTENT_TYPE)>=0||
>
> + value.indexOf(SOAP12Constants.SOAP_12_CONTENT_TYPE) >=0){
>
> + processResponse(postMethod, msgContext);
>
> + }
>
> + }
>
> + }else{
>
> + throw new AxisFault(
>
> + Messages.getMessage(
>
> + "transportError",
>
> + String.valueOf(postMethod.getStatusCode()),
>
> + postMethod.getResponseBodyAsString()));
>
> + }
>
> +
>
> + }
>
> +
>
> + private void processResponse(HttpMethodBase httpMethod, MessageContext msgContext) throws IOException {
>
> + obatainHTTPHeaderInformation(httpMethod, msgContext);
>
> + InputStream in = httpMethod.getResponseBodyAsStream();
>
> + if (in == null) {
>
> + throw new AxisFault(
>
> + Messages.getMessage("canNotBeNull", "InputStream"));
>
> + }
>
> + msgContext.getOperationContext().setProperty(
>
> + MessageContext.TRANSPORT_IN,
>
> + in);
>
> + }
>
> +
>
> + private void transportConfigurationGET(MessageContext msgContext, URL url)
>
> + throws MalformedURLException, AxisFault, IOException {
>
> + GetMethod getMethod = new GetMethod();
>
> + getMethod.setPath(url.getFile());
>
> +
>
> + String charEncoding =
>
> + (String) msgContext.getProperty(
>
> + MessageContext.CHARACTER_SET_ENCODING);
>
> + if (charEncoding == null) //Default encoding scheme
>
> + getMethod.setRequestHeader(
>
> + HTTPConstants.HEADER_CONTENT_TYPE,
>
> + "text/xml; charset="
>
> + + MessageContext.DEFAULT_CHAR_SET_ENCODING);
>
> + else
>
> + getMethod.setRequestHeader(
>
> + HTTPConstants.HEADER_CONTENT_TYPE,
>
> + "text/xml; charset=" + charEncoding);
>
> +
>
> + this.httpClient = new HttpClient();
>
> + HostConfiguration hostConfig =
>
> + this.getHostConfiguration(msgContext, url);
>
> +
>
> + this.httpClient.executeMethod(hostConfig, getMethod);
>
> +
>
> + if (getMethod.getStatusCode() == HttpStatus.SC_OK) {
>
> + processResponse(getMethod, msgContext);
>
> +
>
> +// obatainHTTPHeaderInformation(getMethod, msgContext);
>
> +//
>
> +// InputStream in = getMethod.getResponseBodyAsStream();
>
> +// if (in == null) {
>
> +// throw new AxisFault(
>
> +// Messages.getMessage("canNotBeNull", "InputStream"));
>
> +// }
>
> +// msgContext.getOperationContext().setProperty(
>
> +// MessageContext.TRANSPORT_IN,
>
> +// in);
>
> + } else if (getMethod.getStatusCode() == HttpStatus.SC_ACCEPTED) {
>
> + return;
>
> + }else if (getMethod.getStatusCode() == HttpStatus.SC_INTERNAL_SERVER_ERROR){
>
> +
>
> + Header contenttypeHheader = getMethod.getResponseHeader(
>
> + HTTPConstants.HEADER_CONTENT_TYPE);
>
> +
>
> + String value = contenttypeHheader.getValue();
>
> + if(value != null){
>
> + if(value.indexOf(SOAP11Constants.SOAP_11_CONTENT_TYPE)>=0||
>
> + value.indexOf(SOAP12Constants.SOAP_12_CONTENT_TYPE) >=0){
>
> + processResponse(getMethod, msgContext);
>
> + }
>
> +
>
> + }
>
> + }else{
>
> + throw new AxisFault(
>
> + Messages.getMessage(
>
> + "transportError",
>
> + String.valueOf(getMethod.getStatusCode()),
>
> + getMethod.getResponseBodyAsString()));
>
> + }
>
> + }
>
> +
>
> + /**
>
> + * Collect the HTTP header information and set them in the message context
>
> + * @param method
>
> + * @param msgContext
>
> + */
>
> + private void obatainHTTPHeaderInformation(HttpMethodBase method,MessageContext msgContext) {
>
> + Header header =
>
> + method.getResponseHeader(HTTPConstants.HEADER_CONTENT_TYPE);
>
> + if (header != null) {
>
> + HeaderElement[] headers = header.getElements();
>
> + for (int i = 0; i < headers.length; i++) {
>
> + NameValuePair charsetEnc = headers[i]
>
> + .getParameterByName(HTTPConstants.CHAR_SET_ENCODING);
>
> + if (headers[i]
>
> + .getName()
>
> + .equalsIgnoreCase(
>
> + HTTPConstants.HEADER_ACCEPT_MULTIPART_RELATED)) {
>
> + OperationContext opContext =
>
> + msgContext.getOperationContext();
>
> + if (opContext != null) {
>
> + opContext.setProperty(
>
> + HTTPConstants.MTOM_RECIVED_CONTENT_TYPE,
>
> + header.getValue());
>
> + }
>
> + } else if (charsetEnc != null) {
>
> +
>
> + msgContext
>
> + .setProperty(
>
> + MessageContext.CHARACTER_SET_ENCODING,
>
> + charsetEnc);
>
> + }
>
> + }
>
> + }
>
> +
>
> + }
>
> +
>
> }
>
>
>
--
Davanum Srinivas : http://wso2.com/ - Oxygenating The Web Service Platform
Re: svn commit: r234467 - /webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/http/CommonsHTTPTransportSender.java
Posted by Davanum Srinivas <da...@gmail.com>.
Thilina,
Sigh!!! what was the change here? Please be careful next time...can't
review changes because of the formatting changes.
-- dims
On 8/22/05, thilina@apache.org <th...@apache.org> wrote:
> Author: thilina
> Date: Mon Aug 22 03:53:40 2005
> New Revision: 234467
>
> URL: http://svn.apache.org/viewcvs?rev=234467&view=rev
> Log:
> fixing support for "*m*ultipart/*r*elated"
>
> Modified:
> webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/http/CommonsHTTPTransportSender.java
>
> Modified: webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/http/CommonsHTTPTransportSender.java
> URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/http/CommonsHTTPTransportSender.java?rev=234467&r1=234466&r2=234467&view=diff
> ==============================================================================
> --- webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/http/CommonsHTTPTransportSender.java (original)
> +++ webservices/axis/trunk/java/modules/core/src/org/apache/axis2/transport/http/CommonsHTTPTransportSender.java Mon Aug 22 03:53:40 2005
> @@ -1,543 +1,543 @@
> -/*
> -* Copyright 2004,2005 The Apache Software Foundation.
> -*
> -* Licensed under the Apache License, Version 2.0 (the "License"); you may not
> -* use this file except in compliance with the License. You may obtain a copy of
> -* the License at
> -*
> -* http://www.apache.org/licenses/LICENSE-2.0
> -*
> -* Unless required by applicable law or agreed to in writing, software
> -* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
> -* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
> -* License for the specific language governing permissions and limitations under
> -* the License.
> -*/
> -
> -package org.apache.axis2.transport.http;
> -
> -import org.apache.axis2.AxisFault;
> -import org.apache.axis2.Constants;
> -import org.apache.axis2.soap.SOAP11Constants;
> -import org.apache.axis2.soap.SOAP12Constants;
> -import org.apache.axis2.addressing.AddressingConstants;
> -import org.apache.axis2.addressing.EndpointReference;
> -import org.apache.axis2.context.ConfigurationContext;
> -import org.apache.axis2.context.MessageContext;
> -import org.apache.axis2.context.OperationContext;
> -import org.apache.axis2.description.Parameter;
> -import org.apache.axis2.description.TransportOutDescription;
> -import org.apache.axis2.handlers.AbstractHandler;
> -import org.apache.axis2.i18n.Messages;
> -import org.apache.axis2.om.OMElement;
> -import org.apache.axis2.om.impl.OMOutputImpl;
> -import org.apache.axis2.transport.TransportSender;
> -import org.apache.commons.httpclient.*;
> -import org.apache.commons.httpclient.methods.GetMethod;
> -import org.apache.commons.httpclient.methods.PostMethod;
> -import org.apache.commons.httpclient.methods.RequestEntity;
> -
> -import javax.xml.stream.FactoryConfigurationError;
> -import javax.xml.stream.XMLOutputFactory;
> -import javax.xml.stream.XMLStreamException;
> -import javax.xml.stream.XMLStreamWriter;
> -import java.io.ByteArrayOutputStream;
> -import java.io.IOException;
> -import java.io.InputStream;
> -import java.io.OutputStream;
> -import java.net.MalformedURLException;
> -import java.net.URL;
> -
> -public class CommonsHTTPTransportSender
> - extends AbstractHandler
> - implements TransportSender {
> - private boolean chuncked = false;
> -
> - private String httpVersion = HTTPConstants.HEADER_PROTOCOL_11;
> -
> - public static final String HTTP_METHOD = "HTTP_METHOD";
> -
> - protected HttpClient httpClient;
> -
> - protected OMElement outputMessage;
> -
> - protected OMOutputImpl omOutput = new OMOutputImpl();
> -
> - public CommonsHTTPTransportSender() {
> - } //default
> -
> - public void invoke(MessageContext msgContext) throws AxisFault {
> - try {
> - String charSetEnc =
> - (String) msgContext.getProperty(
> - MessageContext.CHARACTER_SET_ENCODING);
> - if (charSetEnc != null) {
> - omOutput.setCharSetEncoding(charSetEnc);
> - } else {
> - OperationContext opctx = msgContext.getOperationContext();
> - if(opctx != null) {
> - charSetEnc = (String)opctx.getProperty(MessageContext.CHARACTER_SET_ENCODING);
> - } else {
> - charSetEnc = MessageContext.DEFAULT_CHAR_SET_ENCODING;
> - }
> - }
> - msgContext.setDoingMTOM(HTTPTransportUtils.doWriteMTOM(msgContext));
> - omOutput.setSoap11(msgContext.isSOAP11());
> - omOutput.setDoOptimize(msgContext.isDoingMTOM());
> -
> - //Check for the REST behaviour, if you desire rest beahaviour
> - //put a <parameter name="doREST" value="true"/> at the
> - // server.xml/client.xml file
> - EndpointReference epr = null;
> - if (msgContext.getTo() != null
> - && !AddressingConstants.Submission.WSA_ANONYMOUS_URL.equals(
> - msgContext.getTo().getAddress())
> - && !AddressingConstants.Final.WSA_ANONYMOUS_URL.equals(
> - msgContext.getTo().getAddress())) {
> - epr = msgContext.getTo();
> - }
> -
> - OMElement dataOut;
> - if (msgContext.isDoingREST()) {
> - dataOut = msgContext.getEnvelope().getBody().getFirstElement();
> - } else {
> - dataOut = msgContext.getEnvelope();
> - }
> -
> - //TODO timeout, configuration
> - if (epr != null) {
> - writeMessageWithCommons(msgContext, epr, dataOut);
> - } else {
> - OutputStream out =
> - (OutputStream) msgContext.getProperty(
> - MessageContext.TRANSPORT_OUT);
> - if (msgContext.isServerSide()) {
> - HTTPOutTransportInfo transportInfo =
> - (HTTPOutTransportInfo) msgContext.getProperty(
> - HTTPConstants.HTTPOutTransportInfo);
> - if (transportInfo != null) {
> - omOutput.setSoap11(msgContext.isSOAP11());
> - transportInfo.setContentType(omOutput.getContentType());
> - }else{
> - throw new AxisFault(HTTPConstants.HTTPOutTransportInfo + " does not set");
> - }
> - }
> - omOutput.setOutputStream(out, msgContext.isDoingMTOM());
> - dataOut.serialize(omOutput);
> - omOutput.flush();
> - }
> - if(msgContext.getOperationContext() != null){
> - msgContext.getOperationContext().setProperty(
> - Constants.RESPONSE_WRITTEN,
> - Constants.VALUE_TRUE);
> - }
> - } catch (XMLStreamException e) {
> - throw new AxisFault(e);
> - } catch (FactoryConfigurationError e) {
> - throw new AxisFault(e);
> - } catch (IOException e) {
> - throw new AxisFault(e);
> - }
> - }
> -
> - public void writeMessageWithToOutPutStream(
> - MessageContext msgContext,
> - OutputStream out) {
> -
> - }
> -
> - public void writeMessageWithCommons(
> - MessageContext msgContext,
> - EndpointReference toURL,
> - OMElement dataout)
> - throws AxisFault {
> - try {
> - URL url = new URL(toURL.getAddress());
> -
> - String soapActionString = msgContext.getSoapAction();
> - if (soapActionString == null || soapActionString.length() == 0) {
> - soapActionString = msgContext.getWSAAction();
> - }
> - if (soapActionString == null) {
> - soapActionString = "";
> - }
> - //supporting RESTFacility..
> -
> - if (!msgContext.isDoingREST()) {
> - this.transportConfigurationPOST(
> - msgContext,
> - dataout,
> - url,
> - soapActionString);
> - }
> - if (msgContext.isDoingREST()) {
> - if (msgContext.isRestThroughPOST()) {
> - this.transportConfigurationPOST(
> - msgContext,
> - dataout,
> - url,
> - soapActionString);
> - } else {
> - this.transportConfigurationGET(msgContext, url);
> - }
> - }
> - } catch (MalformedURLException e) {
> - throw new AxisFault(e);
> - } catch (HttpException e) {
> - throw new AxisFault(e);
> - } catch (IOException e) {
> - throw new AxisFault(e);
> - }
> -
> - }
> - protected HostConfiguration getHostConfiguration(
> - MessageContext context,
> - URL targetURL) {
> - //TODO cheaking wheather the host is a proxy
> - HostConfiguration config = new HostConfiguration();
> - config.setHost(
> - targetURL.getHost(),
> - targetURL.getPort() == -1 ? 80 : targetURL.getPort());
> - return config;
> - }
> -
> - //get the contentLength...
> - public class AxisRequestEntity implements RequestEntity {
> -
> - private String charSetEnc;
> -
> - private OMElement element;
> -
> - private boolean chuncked;
> -
> - private byte[] bytes;
> -
> - private boolean doingMTOM = false;
> -
> - public AxisRequestEntity(
> - OMElement element,
> - boolean chuncked,
> - boolean doingMTOM,
> - String charSetEncoding) {
> - this.element = element;
> - this.chuncked = chuncked;
> - this.doingMTOM = doingMTOM;
> - this.charSetEnc = charSetEncoding;
> - }
> -
> - public boolean isRepeatable() {
> - return true;
> - }
> -
> - public byte[] writeBytes() throws AxisFault {
> - try {
> - ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();
> - XMLStreamWriter outputWriter =
> - XMLOutputFactory.newInstance().createXMLStreamWriter(
> - bytesOut,
> - charSetEnc);
> - element.serialize(outputWriter);
> - outputWriter.flush();
> - return bytesOut.toByteArray();
> - } catch (XMLStreamException e) {
> - throw new AxisFault(e);
> - } catch (FactoryConfigurationError e) {
> - throw new AxisFault(e);
> - }
> - }
> -
> - public void writeRequest(OutputStream out) throws IOException {
> - try {
> - if (chuncked || doingMTOM) {
> - omOutput.setOutputStream(out, doingMTOM);
> - element.serialize(omOutput);
> - omOutput.flush();
> -
> - } else {
> - if (bytes == null) {
> - bytes = writeBytes();
> - }
> - out.write(bytes);
> - }
> - out.flush();
> - } catch (XMLStreamException e) {
> - throw new AxisFault(e);
> - } catch (FactoryConfigurationError e) {
> - throw new AxisFault(e);
> - } catch (IOException e) {
> - throw new AxisFault(e);
> - }
> - }
> -
> - public long getContentLength() {
> - try {
> - if (chuncked || doingMTOM) {
> - return -1;
> - } else {
> - if (bytes == null) {
> - bytes = writeBytes();
> - }
> - return bytes.length;
> - }
> - } catch (AxisFault e) {
> - return -1;
> - }
> - }
> -
> - public String getContentType() {
> - return omOutput.getContentType();
> - }
> - }
> -
> - /*
> - * (non-Javadoc)
> - *
> - * @see org.apache.axis2.transport.TransportSender#cleanUp(org.apache.axis2.context.MessageContext)
> - */
> - public void cleanUp(MessageContext msgContext) throws AxisFault {
> - HttpMethod httpMethod =
> - (HttpMethod) msgContext.getProperty(HTTP_METHOD);
> - if (httpMethod != null) {
> - httpMethod.releaseConnection();
> - }
> -
> - }
> -
> - public void init(
> - ConfigurationContext confContext,
> - TransportOutDescription transportOut)
> - throws AxisFault {
> - //<parameter name="PROTOCOL" locked="xsd:false">HTTP/1.0</parameter> or
> - //<parameter name="PROTOCOL" locked="xsd:false">HTTP/1.1</parameter> is
> - // checked
> - Parameter version =
> - transportOut.getParameter(HTTPConstants.PROTOCOL_VERSION);
> - if (version != null) {
> - if (HTTPConstants.HEADER_PROTOCOL_11.equals(version.getValue())) {
> - this.httpVersion = HTTPConstants.HEADER_PROTOCOL_11;
> - Parameter transferEncoding =
> - transportOut.getParameter(
> - HTTPConstants.HEADER_TRANSFER_ENCODING);
> - if (transferEncoding != null
> - && HTTPConstants.HEADER_TRANSFER_ENCODING_CHUNKED.equals(
> - transferEncoding.getValue())) {
> - this.chuncked = true;
> - }
> - } else if (
> - HTTPConstants.HEADER_PROTOCOL_10.equals(version.getValue())) {
> - this.httpVersion = HTTPConstants.HEADER_PROTOCOL_10;
> - } else {
> - throw new AxisFault(
> - "Parameter "
> - + HTTPConstants.PROTOCOL_VERSION
> - + " Can have values only HTTP/1.0 or HTTP/1.1");
> - }
> - }
> -
> - }
> -
> - private void transportConfigurationPOST(
> - MessageContext msgContext,
> - OMElement dataout,
> - URL url,
> - String soapActionString)
> - throws MalformedURLException, AxisFault, IOException {
> -
> - //execuite the HtttpMethodBase - a connection manager can be given for handle multiple
> - httpClient = new HttpClient();
> - //hostConfig handles the socket functions..
> - //HostConfiguration hostConfig = getHostConfiguration(msgContext, url);
> +/*
>
> +* Copyright 2004,2005 The Apache Software Foundation.
>
> +*
>
> +* Licensed under the Apache License, Version 2.0 (the "License"); you may not
>
> +* use this file except in compliance with the License. You may obtain a copy of
>
> +* the License at
>
> +*
>
> +* http://www.apache.org/licenses/LICENSE-2.0
>
> +*
>
> +* Unless required by applicable law or agreed to in writing, software
>
> +* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
>
> +* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
>
> +* License for the specific language governing permissions and limitations under
>
> +* the License.
>
> +*/
>
> +
>
> +package org.apache.axis2.transport.http;
>
> +
>
> +import org.apache.axis2.AxisFault;
>
> +import org.apache.axis2.Constants;
>
> +import org.apache.axis2.soap.SOAP11Constants;
>
> +import org.apache.axis2.soap.SOAP12Constants;
>
> +import org.apache.axis2.addressing.AddressingConstants;
>
> +import org.apache.axis2.addressing.EndpointReference;
>
> +import org.apache.axis2.context.ConfigurationContext;
>
> +import org.apache.axis2.context.MessageContext;
>
> +import org.apache.axis2.context.OperationContext;
>
> +import org.apache.axis2.description.Parameter;
>
> +import org.apache.axis2.description.TransportOutDescription;
>
> +import org.apache.axis2.handlers.AbstractHandler;
>
> +import org.apache.axis2.i18n.Messages;
>
> +import org.apache.axis2.om.OMElement;
>
> +import org.apache.axis2.om.impl.OMOutputImpl;
>
> +import org.apache.axis2.transport.TransportSender;
>
> +import org.apache.commons.httpclient.*;
>
> +import org.apache.commons.httpclient.methods.GetMethod;
>
> +import org.apache.commons.httpclient.methods.PostMethod;
>
> +import org.apache.commons.httpclient.methods.RequestEntity;
>
> +
>
> +import javax.xml.stream.FactoryConfigurationError;
>
> +import javax.xml.stream.XMLOutputFactory;
>
> +import javax.xml.stream.XMLStreamException;
>
> +import javax.xml.stream.XMLStreamWriter;
>
> +import java.io.ByteArrayOutputStream;
>
> +import java.io.IOException;
>
> +import java.io.InputStream;
>
> +import java.io.OutputStream;
>
> +import java.net.MalformedURLException;
>
> +import java.net.URL;
>
> +
>
> +public class CommonsHTTPTransportSender
>
> + extends AbstractHandler
>
> + implements TransportSender {
>
> + private boolean chuncked = false;
>
> +
>
> + private String httpVersion = HTTPConstants.HEADER_PROTOCOL_11;
>
> +
>
> + public static final String HTTP_METHOD = "HTTP_METHOD";
>
> +
>
> + protected HttpClient httpClient;
>
> +
>
> + protected OMElement outputMessage;
>
> +
>
> + protected OMOutputImpl omOutput = new OMOutputImpl();
>
> +
>
> + public CommonsHTTPTransportSender() {
>
> + } //default
>
> +
>
> + public void invoke(MessageContext msgContext) throws AxisFault {
>
> + try {
>
> + String charSetEnc =
>
> + (String) msgContext.getProperty(
>
> + MessageContext.CHARACTER_SET_ENCODING);
>
> + if (charSetEnc != null) {
>
> + omOutput.setCharSetEncoding(charSetEnc);
>
> + } else {
>
> + OperationContext opctx = msgContext.getOperationContext();
>
> + if(opctx != null) {
>
> + charSetEnc = (String)opctx.getProperty(MessageContext.CHARACTER_SET_ENCODING);
>
> + } else {
>
> + charSetEnc = MessageContext.DEFAULT_CHAR_SET_ENCODING;
>
> + }
>
> + }
>
> + msgContext.setDoingMTOM(HTTPTransportUtils.doWriteMTOM(msgContext));
>
> + omOutput.setSoap11(msgContext.isSOAP11());
>
> + omOutput.setDoOptimize(msgContext.isDoingMTOM());
>
> +
>
> + //Check for the REST behaviour, if you desire rest beahaviour
>
> + //put a <parameter name="doREST" value="true"/> at the
>
> + // server.xml/client.xml file
>
> + EndpointReference epr = null;
>
> + if (msgContext.getTo() != null
>
> + && !AddressingConstants.Submission.WSA_ANONYMOUS_URL.equals(
>
> + msgContext.getTo().getAddress())
>
> + && !AddressingConstants.Final.WSA_ANONYMOUS_URL.equals(
>
> + msgContext.getTo().getAddress())) {
>
> + epr = msgContext.getTo();
>
> + }
>
> +
>
> + OMElement dataOut;
>
> + if (msgContext.isDoingREST()) {
>
> + dataOut = msgContext.getEnvelope().getBody().getFirstElement();
>
> + } else {
>
> + dataOut = msgContext.getEnvelope();
>
> + }
>
> +
>
> + //TODO timeout, configuration
>
> + if (epr != null) {
>
> + writeMessageWithCommons(msgContext, epr, dataOut);
>
> + } else {
>
> + OutputStream out =
>
> + (OutputStream) msgContext.getProperty(
>
> + MessageContext.TRANSPORT_OUT);
>
> + if (msgContext.isServerSide()) {
>
> + HTTPOutTransportInfo transportInfo =
>
> + (HTTPOutTransportInfo) msgContext.getProperty(
>
> + HTTPConstants.HTTPOutTransportInfo);
>
> + if (transportInfo != null) {
>
> + omOutput.setSoap11(msgContext.isSOAP11());
>
> + transportInfo.setContentType(omOutput.getContentType());
>
> + }else{
>
> + throw new AxisFault(HTTPConstants.HTTPOutTransportInfo + " does not set");
>
> + }
>
> + }
>
> + omOutput.setOutputStream(out, msgContext.isDoingMTOM());
>
> + dataOut.serialize(omOutput);
>
> + omOutput.flush();
>
> + }
>
> + if(msgContext.getOperationContext() != null){
>
> + msgContext.getOperationContext().setProperty(
>
> + Constants.RESPONSE_WRITTEN,
>
> + Constants.VALUE_TRUE);
>
> + }
>
> + } catch (XMLStreamException e) {
>
> + throw new AxisFault(e);
>
> + } catch (FactoryConfigurationError e) {
>
> + throw new AxisFault(e);
>
> + } catch (IOException e) {
>
> + throw new AxisFault(e);
>
> + }
>
> + }
>
> +
>
> + public void writeMessageWithToOutPutStream(
>
> + MessageContext msgContext,
>
> + OutputStream out) {
>
> +
>
> + }
>
> +
>
> + public void writeMessageWithCommons(
>
> + MessageContext msgContext,
>
> + EndpointReference toURL,
>
> + OMElement dataout)
>
> + throws AxisFault {
>
> + try {
>
> + URL url = new URL(toURL.getAddress());
>
> +
>
> + String soapActionString = msgContext.getSoapAction();
>
> + if (soapActionString == null || soapActionString.length() == 0) {
>
> + soapActionString = msgContext.getWSAAction();
>
> + }
>
> + if (soapActionString == null) {
>
> + soapActionString = "";
>
> + }
>
> + //supporting RESTFacility..
>
> +
>
> + if (!msgContext.isDoingREST()) {
>
> + this.transportConfigurationPOST(
>
> + msgContext,
>
> + dataout,
>
> + url,
>
> + soapActionString);
>
> + }
>
> + if (msgContext.isDoingREST()) {
>
> + if (msgContext.isRestThroughPOST()) {
>
> + this.transportConfigurationPOST(
>
> + msgContext,
>
> + dataout,
>
> + url,
>
> + soapActionString);
>
> + } else {
>
> + this.transportConfigurationGET(msgContext, url);
>
> + }
>
> + }
>
> + } catch (MalformedURLException e) {
>
> + throw new AxisFault(e);
>
> + } catch (HttpException e) {
>
> + throw new AxisFault(e);
>
> + } catch (IOException e) {
>
> + throw new AxisFault(e);
>
> + }
>
> +
>
> + }
>
> + protected HostConfiguration getHostConfiguration(
>
> + MessageContext context,
>
> + URL targetURL) {
>
> + //TODO cheaking wheather the host is a proxy
>
> + HostConfiguration config = new HostConfiguration();
>
> + config.setHost(
>
> + targetURL.getHost(),
>
> + targetURL.getPort() == -1 ? 80 : targetURL.getPort());
>
> + return config;
>
> + }
>
> +
>
> + //get the contentLength...
>
> + public class AxisRequestEntity implements RequestEntity {
>
> +
>
> + private String charSetEnc;
>
> +
>
> + private OMElement element;
>
> +
>
> + private boolean chuncked;
>
> +
>
> + private byte[] bytes;
>
> +
>
> + private boolean doingMTOM = false;
>
> +
>
> + public AxisRequestEntity(
>
> + OMElement element,
>
> + boolean chuncked,
>
> + boolean doingMTOM,
>
> + String charSetEncoding) {
>
> + this.element = element;
>
> + this.chuncked = chuncked;
>
> + this.doingMTOM = doingMTOM;
>
> + this.charSetEnc = charSetEncoding;
>
> + }
>
> +
>
> + public boolean isRepeatable() {
>
> + return true;
>
> + }
>
> +
>
> + public byte[] writeBytes() throws AxisFault {
>
> + try {
>
> + ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();
>
> + XMLStreamWriter outputWriter =
>
> + XMLOutputFactory.newInstance().createXMLStreamWriter(
>
> + bytesOut,
>
> + charSetEnc);
>
> + element.serialize(outputWriter);
>
> + outputWriter.flush();
>
> + return bytesOut.toByteArray();
>
> + } catch (XMLStreamException e) {
>
> + throw new AxisFault(e);
>
> + } catch (FactoryConfigurationError e) {
>
> + throw new AxisFault(e);
>
> + }
>
> + }
>
> +
>
> + public void writeRequest(OutputStream out) throws IOException {
>
> + try {
>
> + if (chuncked || doingMTOM) {
>
> + omOutput.setOutputStream(out, doingMTOM);
>
> + element.serialize(omOutput);
>
> + omOutput.flush();
>
> +
>
> + } else {
>
> + if (bytes == null) {
>
> + bytes = writeBytes();
>
> + }
>
> + out.write(bytes);
>
> + }
>
> + out.flush();
>
> + } catch (XMLStreamException e) {
>
> + throw new AxisFault(e);
>
> + } catch (FactoryConfigurationError e) {
>
> + throw new AxisFault(e);
>
> + } catch (IOException e) {
>
> + throw new AxisFault(e);
>
> + }
>
> + }
>
> +
>
> + public long getContentLength() {
>
> + try {
>
> + if (chuncked || doingMTOM) {
>
> + return -1;
>
> + } else {
>
> + if (bytes == null) {
>
> + bytes = writeBytes();
>
> + }
>
> + return bytes.length;
>
> + }
>
> + } catch (AxisFault e) {
>
> + return -1;
>
> + }
>
> + }
>
> +
>
> + public String getContentType() {
>
> + return omOutput.getContentType();
>
> + }
>
> + }
>
> +
>
> + /*
>
> + * (non-Javadoc)
>
> + *
>
> + * @see org.apache.axis2.transport.TransportSender#cleanUp(org.apache.axis2.context.MessageContext)
>
> + */
>
> + public void cleanUp(MessageContext msgContext) throws AxisFault {
>
> + HttpMethod httpMethod =
>
> + (HttpMethod) msgContext.getProperty(HTTP_METHOD);
>
> + if (httpMethod != null) {
>
> + httpMethod.releaseConnection();
>
> + }
>
> +
>
> + }
>
> +
>
> + public void init(
>
> + ConfigurationContext confContext,
>
> + TransportOutDescription transportOut)
>
> + throws AxisFault {
>
> + //<parameter name="PROTOCOL" locked="xsd:false">HTTP/1.0</parameter> or
>
> + //<parameter name="PROTOCOL" locked="xsd:false">HTTP/1.1</parameter> is
>
> + // checked
>
> + Parameter version =
>
> + transportOut.getParameter(HTTPConstants.PROTOCOL_VERSION);
>
> + if (version != null) {
>
> + if (HTTPConstants.HEADER_PROTOCOL_11.equals(version.getValue())) {
>
> + this.httpVersion = HTTPConstants.HEADER_PROTOCOL_11;
>
> + Parameter transferEncoding =
>
> + transportOut.getParameter(
>
> + HTTPConstants.HEADER_TRANSFER_ENCODING);
>
> + if (transferEncoding != null
>
> + && HTTPConstants.HEADER_TRANSFER_ENCODING_CHUNKED.equals(
>
> + transferEncoding.getValue())) {
>
> + this.chuncked = true;
>
> + }
>
> + } else if (
>
> + HTTPConstants.HEADER_PROTOCOL_10.equals(version.getValue())) {
>
> + this.httpVersion = HTTPConstants.HEADER_PROTOCOL_10;
>
> + } else {
>
> + throw new AxisFault(
>
> + "Parameter "
>
> + + HTTPConstants.PROTOCOL_VERSION
>
> + + " Can have values only HTTP/1.0 or HTTP/1.1");
>
> + }
>
> + }
>
> +
>
> + }
>
> +
>
> + private void transportConfigurationPOST(
>
> + MessageContext msgContext,
>
> + OMElement dataout,
>
> + URL url,
>
> + String soapActionString)
>
> + throws MalformedURLException, AxisFault, IOException {
>
> +
>
> + //execuite the HtttpMethodBase - a connection manager can be given for handle multiple
>
> + httpClient = new HttpClient();
>
> + //hostConfig handles the socket functions..
>
> + //HostConfiguration hostConfig = getHostConfiguration(msgContext, url);
>
>
>
> // SO_TIMEOUT -- timeout for blocking reads
>
> httpClient.getHttpConnectionManager().getParams().setSoTimeout(60000);
>
> // timeout for initial connection
>
> httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(60000);
>
> -
> - PostMethod postMethod = new PostMethod(url.toString());
> - postMethod.setPath(url.getFile());
> -
> - msgContext.setProperty(HTTP_METHOD, postMethod);
> -
> - String charEncoding =
> - (String) msgContext.getProperty(
> - MessageContext.CHARACTER_SET_ENCODING);
> - if(charEncoding == null){
> - charEncoding = MessageContext.DEFAULT_CHAR_SET_ENCODING;
> - }
> -
> - postMethod.setRequestEntity(
> - new AxisRequestEntity(
> - dataout,
> - chuncked,
> - msgContext.isDoingMTOM(),
> - charEncoding));
> -
> - if (!httpVersion.equals(HTTPConstants.HEADER_PROTOCOL_10)
> - && chuncked) {
> - postMethod.setContentChunked(true);
> - }
> - postMethod.setRequestHeader(
> - HTTPConstants.HEADER_USER_AGENT,
> - "Axis/2.0");
> - if (!msgContext.isDoingREST()) {
> - postMethod.setRequestHeader(
> - HTTPConstants.HEADER_SOAP_ACTION,
> - soapActionString);
> - }
> - postMethod.setRequestHeader(HTTPConstants.HEADER_HOST, url.getHost());
> - if (httpVersion != null) {
> - if (httpVersion.equals(HTTPConstants.HEADER_PROTOCOL_10)) {
> - //postMethod.setHttp11(false); todo method to findout the transport version...
> - //allowing keep-alive for 1.0
> - postMethod.setRequestHeader(
> - HTTPConstants.HEADER_CONNECTION,
> - HTTPConstants.HEADER_CONNECTION_KEEPALIVE);
> - } else {
> - // allowing keep-alive for 1.1
> - postMethod.setRequestHeader(
> - HTTPConstants.HEADER_CONNECTION,
> - HTTPConstants.HEADER_CONNECTION_KEEPALIVE);
> - postMethod.setRequestHeader(
> - HTTPConstants.HEADER_EXPECT,
> - HTTPConstants.HEADER_EXPECT_100_Continue);
> - }
> - }
> -
> - this.httpClient.executeMethod(postMethod);
> -
> - if (postMethod.getStatusCode() == HttpStatus.SC_OK) {
> - processResponse(postMethod, msgContext);
> - } else if (postMethod.getStatusCode() == HttpStatus.SC_ACCEPTED) {
> - return;
> - } else if (postMethod.getStatusCode() == HttpStatus.SC_INTERNAL_SERVER_ERROR){
> -
> - Header contenttypeHheader = postMethod.getResponseHeader(
> - HTTPConstants.HEADER_CONTENT_TYPE);
> -
> - String value = contenttypeHheader.getValue();
> - if(value != null){
> - if(value.indexOf(SOAP11Constants.SOAP_11_CONTENT_TYPE)>=0||
> - value.indexOf(SOAP12Constants.SOAP_12_CONTENT_TYPE) >=0){
> - processResponse(postMethod, msgContext);
> - }
> - }
> - }else{
> - throw new AxisFault(
> - Messages.getMessage(
> - "transportError",
> - String.valueOf(postMethod.getStatusCode()),
> - postMethod.getResponseBodyAsString()));
> - }
> -
> - }
> -
> - private void processResponse(HttpMethodBase httpMethod, MessageContext msgContext) throws IOException {
> - obatainHTTPHeaderInformation(httpMethod, msgContext);
> - InputStream in = httpMethod.getResponseBodyAsStream();
> - if (in == null) {
> - throw new AxisFault(
> - Messages.getMessage("canNotBeNull", "InputStream"));
> - }
> - msgContext.getOperationContext().setProperty(
> - MessageContext.TRANSPORT_IN,
> - in);
> - }
> -
> - private void transportConfigurationGET(MessageContext msgContext, URL url)
> - throws MalformedURLException, AxisFault, IOException {
> - GetMethod getMethod = new GetMethod();
> - getMethod.setPath(url.getFile());
> -
> - String charEncoding =
> - (String) msgContext.getProperty(
> - MessageContext.CHARACTER_SET_ENCODING);
> - if (charEncoding == null) //Default encoding scheme
> - getMethod.setRequestHeader(
> - HTTPConstants.HEADER_CONTENT_TYPE,
> - "text/xml; charset="
> - + MessageContext.DEFAULT_CHAR_SET_ENCODING);
> - else
> - getMethod.setRequestHeader(
> - HTTPConstants.HEADER_CONTENT_TYPE,
> - "text/xml; charset=" + charEncoding);
> -
> - this.httpClient = new HttpClient();
> - HostConfiguration hostConfig =
> - this.getHostConfiguration(msgContext, url);
> -
> - this.httpClient.executeMethod(hostConfig, getMethod);
> -
> - if (getMethod.getStatusCode() == HttpStatus.SC_OK) {
> - processResponse(getMethod, msgContext);
> -
> -// obatainHTTPHeaderInformation(getMethod, msgContext);
> -//
> -// InputStream in = getMethod.getResponseBodyAsStream();
> -// if (in == null) {
> -// throw new AxisFault(
> -// Messages.getMessage("canNotBeNull", "InputStream"));
> -// }
> -// msgContext.getOperationContext().setProperty(
> -// MessageContext.TRANSPORT_IN,
> -// in);
> - } else if (getMethod.getStatusCode() == HttpStatus.SC_ACCEPTED) {
> - return;
> - }else if (getMethod.getStatusCode() == HttpStatus.SC_INTERNAL_SERVER_ERROR){
> -
> - Header contenttypeHheader = getMethod.getResponseHeader(
> - HTTPConstants.HEADER_CONTENT_TYPE);
> -
> - String value = contenttypeHheader.getValue();
> - if(value != null){
> - if(value.indexOf(SOAP11Constants.SOAP_11_CONTENT_TYPE)>=0||
> - value.indexOf(SOAP12Constants.SOAP_12_CONTENT_TYPE) >=0){
> - processResponse(getMethod, msgContext);
> - }
> -
> - }
> - }else{
> - throw new AxisFault(
> - Messages.getMessage(
> - "transportError",
> - String.valueOf(getMethod.getStatusCode()),
> - getMethod.getResponseBodyAsString()));
> - }
> - }
> -
> - /**
> - * Collect the HTTP header information and set them in the message context
> - * @param method
> - * @param msgContext
> - */
> - private void obatainHTTPHeaderInformation(HttpMethodBase method,MessageContext msgContext) {
> - Header header =
> - method.getResponseHeader(HTTPConstants.HEADER_CONTENT_TYPE);
> - if (header != null) {
> - HeaderElement[] headers = header.getElements();
> - for (int i = 0; i < headers.length; i++) {
> - NameValuePair charsetEnc = headers[i]
> - .getParameterByName(HTTPConstants.CHAR_SET_ENCODING);
> - if (headers[i]
> - .getName()
> - .equals(
> - HTTPConstants.HEADER_ACCEPT_MULTIPART_RELATED)) {
> - OperationContext opContext =
> - msgContext.getOperationContext();
> - if (opContext != null) {
> - opContext.setProperty(
> - HTTPConstants.MTOM_RECIVED_CONTENT_TYPE,
> - header.getValue());
> - }
> - } else if (charsetEnc != null) {
> -
> - msgContext
> - .setProperty(
> - MessageContext.CHARACTER_SET_ENCODING,
> - charsetEnc);
> - }
> - }
> - }
> -
> - }
> -
> +
>
> + PostMethod postMethod = new PostMethod(url.toString());
>
> + postMethod.setPath(url.getFile());
>
> +
>
> + msgContext.setProperty(HTTP_METHOD, postMethod);
>
> +
>
> + String charEncoding =
>
> + (String) msgContext.getProperty(
>
> + MessageContext.CHARACTER_SET_ENCODING);
>
> + if(charEncoding == null){
>
> + charEncoding = MessageContext.DEFAULT_CHAR_SET_ENCODING;
>
> + }
>
> +
>
> + postMethod.setRequestEntity(
>
> + new AxisRequestEntity(
>
> + dataout,
>
> + chuncked,
>
> + msgContext.isDoingMTOM(),
>
> + charEncoding));
>
> +
>
> + if (!httpVersion.equals(HTTPConstants.HEADER_PROTOCOL_10)
>
> + && chuncked) {
>
> + postMethod.setContentChunked(true);
>
> + }
>
> + postMethod.setRequestHeader(
>
> + HTTPConstants.HEADER_USER_AGENT,
>
> + "Axis/2.0");
>
> + if (!msgContext.isDoingREST()) {
>
> + postMethod.setRequestHeader(
>
> + HTTPConstants.HEADER_SOAP_ACTION,
>
> + soapActionString);
>
> + }
>
> + postMethod.setRequestHeader(HTTPConstants.HEADER_HOST, url.getHost());
>
> + if (httpVersion != null) {
>
> + if (httpVersion.equals(HTTPConstants.HEADER_PROTOCOL_10)) {
>
> + //postMethod.setHttp11(false); todo method to findout the transport version...
>
> + //allowing keep-alive for 1.0
>
> + postMethod.setRequestHeader(
>
> + HTTPConstants.HEADER_CONNECTION,
>
> + HTTPConstants.HEADER_CONNECTION_KEEPALIVE);
>
> + } else {
>
> + // allowing keep-alive for 1.1
>
> + postMethod.setRequestHeader(
>
> + HTTPConstants.HEADER_CONNECTION,
>
> + HTTPConstants.HEADER_CONNECTION_KEEPALIVE);
>
> + postMethod.setRequestHeader(
>
> + HTTPConstants.HEADER_EXPECT,
>
> + HTTPConstants.HEADER_EXPECT_100_Continue);
>
> + }
>
> + }
>
> +
>
> + this.httpClient.executeMethod(postMethod);
>
> +
>
> + if (postMethod.getStatusCode() == HttpStatus.SC_OK) {
>
> + processResponse(postMethod, msgContext);
>
> + } else if (postMethod.getStatusCode() == HttpStatus.SC_ACCEPTED) {
>
> + return;
>
> + } else if (postMethod.getStatusCode() == HttpStatus.SC_INTERNAL_SERVER_ERROR){
>
> +
>
> + Header contenttypeHheader = postMethod.getResponseHeader(
>
> + HTTPConstants.HEADER_CONTENT_TYPE);
>
> +
>
> + String value = contenttypeHheader.getValue();
>
> + if(value != null){
>
> + if(value.indexOf(SOAP11Constants.SOAP_11_CONTENT_TYPE)>=0||
>
> + value.indexOf(SOAP12Constants.SOAP_12_CONTENT_TYPE) >=0){
>
> + processResponse(postMethod, msgContext);
>
> + }
>
> + }
>
> + }else{
>
> + throw new AxisFault(
>
> + Messages.getMessage(
>
> + "transportError",
>
> + String.valueOf(postMethod.getStatusCode()),
>
> + postMethod.getResponseBodyAsString()));
>
> + }
>
> +
>
> + }
>
> +
>
> + private void processResponse(HttpMethodBase httpMethod, MessageContext msgContext) throws IOException {
>
> + obatainHTTPHeaderInformation(httpMethod, msgContext);
>
> + InputStream in = httpMethod.getResponseBodyAsStream();
>
> + if (in == null) {
>
> + throw new AxisFault(
>
> + Messages.getMessage("canNotBeNull", "InputStream"));
>
> + }
>
> + msgContext.getOperationContext().setProperty(
>
> + MessageContext.TRANSPORT_IN,
>
> + in);
>
> + }
>
> +
>
> + private void transportConfigurationGET(MessageContext msgContext, URL url)
>
> + throws MalformedURLException, AxisFault, IOException {
>
> + GetMethod getMethod = new GetMethod();
>
> + getMethod.setPath(url.getFile());
>
> +
>
> + String charEncoding =
>
> + (String) msgContext.getProperty(
>
> + MessageContext.CHARACTER_SET_ENCODING);
>
> + if (charEncoding == null) //Default encoding scheme
>
> + getMethod.setRequestHeader(
>
> + HTTPConstants.HEADER_CONTENT_TYPE,
>
> + "text/xml; charset="
>
> + + MessageContext.DEFAULT_CHAR_SET_ENCODING);
>
> + else
>
> + getMethod.setRequestHeader(
>
> + HTTPConstants.HEADER_CONTENT_TYPE,
>
> + "text/xml; charset=" + charEncoding);
>
> +
>
> + this.httpClient = new HttpClient();
>
> + HostConfiguration hostConfig =
>
> + this.getHostConfiguration(msgContext, url);
>
> +
>
> + this.httpClient.executeMethod(hostConfig, getMethod);
>
> +
>
> + if (getMethod.getStatusCode() == HttpStatus.SC_OK) {
>
> + processResponse(getMethod, msgContext);
>
> +
>
> +// obatainHTTPHeaderInformation(getMethod, msgContext);
>
> +//
>
> +// InputStream in = getMethod.getResponseBodyAsStream();
>
> +// if (in == null) {
>
> +// throw new AxisFault(
>
> +// Messages.getMessage("canNotBeNull", "InputStream"));
>
> +// }
>
> +// msgContext.getOperationContext().setProperty(
>
> +// MessageContext.TRANSPORT_IN,
>
> +// in);
>
> + } else if (getMethod.getStatusCode() == HttpStatus.SC_ACCEPTED) {
>
> + return;
>
> + }else if (getMethod.getStatusCode() == HttpStatus.SC_INTERNAL_SERVER_ERROR){
>
> +
>
> + Header contenttypeHheader = getMethod.getResponseHeader(
>
> + HTTPConstants.HEADER_CONTENT_TYPE);
>
> +
>
> + String value = contenttypeHheader.getValue();
>
> + if(value != null){
>
> + if(value.indexOf(SOAP11Constants.SOAP_11_CONTENT_TYPE)>=0||
>
> + value.indexOf(SOAP12Constants.SOAP_12_CONTENT_TYPE) >=0){
>
> + processResponse(getMethod, msgContext);
>
> + }
>
> +
>
> + }
>
> + }else{
>
> + throw new AxisFault(
>
> + Messages.getMessage(
>
> + "transportError",
>
> + String.valueOf(getMethod.getStatusCode()),
>
> + getMethod.getResponseBodyAsString()));
>
> + }
>
> + }
>
> +
>
> + /**
>
> + * Collect the HTTP header information and set them in the message context
>
> + * @param method
>
> + * @param msgContext
>
> + */
>
> + private void obatainHTTPHeaderInformation(HttpMethodBase method,MessageContext msgContext) {
>
> + Header header =
>
> + method.getResponseHeader(HTTPConstants.HEADER_CONTENT_TYPE);
>
> + if (header != null) {
>
> + HeaderElement[] headers = header.getElements();
>
> + for (int i = 0; i < headers.length; i++) {
>
> + NameValuePair charsetEnc = headers[i]
>
> + .getParameterByName(HTTPConstants.CHAR_SET_ENCODING);
>
> + if (headers[i]
>
> + .getName()
>
> + .equalsIgnoreCase(
>
> + HTTPConstants.HEADER_ACCEPT_MULTIPART_RELATED)) {
>
> + OperationContext opContext =
>
> + msgContext.getOperationContext();
>
> + if (opContext != null) {
>
> + opContext.setProperty(
>
> + HTTPConstants.MTOM_RECIVED_CONTENT_TYPE,
>
> + header.getValue());
>
> + }
>
> + } else if (charsetEnc != null) {
>
> +
>
> + msgContext
>
> + .setProperty(
>
> + MessageContext.CHARACTER_SET_ENCODING,
>
> + charsetEnc);
>
> + }
>
> + }
>
> + }
>
> +
>
> + }
>
> +
>
> }
>
>
>
--
Davanum Srinivas : http://wso2.com/ - Oxygenating The Web Service Platform