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);
+ }
+ }
+ }
+
+ }
+
}