Return-Path: Delivered-To: apmail-ws-axis-dev-archive@www.apache.org Received: (qmail 2216 invoked from network); 12 Jan 2007 10:54:33 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 12 Jan 2007 10:54:32 -0000 Received: (qmail 96039 invoked by uid 500); 12 Jan 2007 10:54:38 -0000 Delivered-To: apmail-ws-axis-dev-archive@ws.apache.org Received: (qmail 95961 invoked by uid 500); 12 Jan 2007 10:54:38 -0000 Mailing-List: contact axis-cvs-help@ws.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: List-Id: Delivered-To: mailing list axis-cvs@ws.apache.org Received: (qmail 95950 invoked by uid 500); 12 Jan 2007 10:54:38 -0000 Delivered-To: apmail-ws-axis2-cvs@ws.apache.org Received: (qmail 95947 invoked by uid 99); 12 Jan 2007 10:54:38 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 12 Jan 2007 02:54:38 -0800 X-ASF-Spam-Status: No, hits=-9.4 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 12 Jan 2007 02:54:30 -0800 Received: by eris.apache.org (Postfix, from userid 65534) id EEA811A981D; Fri, 12 Jan 2007 02:53:28 -0800 (PST) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r495545 - in /webservices/axis2/trunk/java/modules/kernel: src/org/apache/axis2/ src/org/apache/axis2/deployment/ src/org/apache/axis2/engine/ src/org/apache/axis2/transport/ src/org/apache/axis2/transport/http/ src/org/apache/axis2/util/ t... Date: Fri, 12 Jan 2007 10:53:27 -0000 To: axis2-cvs@ws.apache.org From: thilina@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20070112105328.EEA811A981D@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: thilina Date: Fri Jan 12 02:53:25 2007 New Revision: 495545 URL: http://svn.apache.org/viewvc?view=rev&rev=495545 Log: MessageFormatter configuration logic using Axis2.xml.. Giving the users the ability to configure the MIME boundary.. Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/Constants.java webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/AxisConfigBuilder.java webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/AxisConfiguration.java webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/MessageFormatter.java webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/TransportUtils.java webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/CommonsHTTPTransportSender.java webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/HTTPTransportUtils.java webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/SOAPOverHTTPSender.java webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/MessageContextBuilder.java webservices/axis2/trunk/java/modules/kernel/test-resources/deployment/messageFormatterTest/axis2.xml webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/deployment/MessageFormatterDeploymentTest.java Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/Constants.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/Constants.java?view=diff&rev=495545&r1=495544&r2=495545 ============================================================================== --- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/Constants.java (original) +++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/Constants.java Fri Jan 12 02:53:25 2007 @@ -235,17 +235,19 @@ public static final String ENABLE_REST = "enableREST"; public static final String ENABLE_REST_THROUGH_GET = "restThroughGet"; - // globally enable MTOM + //Attachment configurations public static final String ENABLE_MTOM = "enableMTOM"; public static final String CACHE_ATTACHMENTS = "cacheAttachments"; public static final String ATTACHMENT_TEMP_DIR = "attachmentDIR"; public static final String FILE_SIZE_THRESHOLD = "sizeThreshold"; + public static final String ENABLE_SWA = "enableSwA"; + public static final String MIME_BOUNDARY = "mimeBoundary"; + + public static final String HTTP_METHOD_GET = "GET"; public static final String HTTP_METHOD = "HTTP_METHOD"; public static final String HTTP_METHOD_POST = "POST"; - public static final String ENABLE_SWA = "enableSwA"; - public static final String CONTENT_TYPE = "ContentType"; public static final String IS_USING_SEPARATE_LISTENER = "IsUsingSeparateListener"; @@ -289,6 +291,12 @@ * its own manner. */ public static final String USE_CUSTOM_LISTENER = "UseCustomListener"; + + /** + * This is used to specify the message format which the message needs to be serializes. + * @see org.apache.axis2.transport.MessageFormatter + */ + public static final String MESSAGE_TYPE = "messageType"; } } Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/AxisConfigBuilder.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/AxisConfigBuilder.java?view=diff&rev=495545&r1=495544&r2=495545 ============================================================================== --- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/AxisConfigBuilder.java (original) +++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/AxisConfigBuilder.java Fri Jan 12 02:53:25 2007 @@ -146,14 +146,14 @@ } } - // process MessageBuilders + // process MessageFormatters OMElement messageFormattersElement = config_element.getFirstChildWithName(new QName(TAG_MESSAGE_FORMATTERS)); if (messageFormattersElement != null) { HashMap messageFormatters = processMessageFormatters(messageFormattersElement); Iterator keys = messageFormatters.keySet().iterator(); while (keys.hasNext()) { String key = (String) keys.next(); - axisConfig.addMessageBuilder(key, (String) messageFormatters.get(key)); + axisConfig.addMessageFormatter(key, (String) messageFormatters.get(key)); } } Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/AxisConfiguration.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/AxisConfiguration.java?view=diff&rev=495545&r1=495544&r2=495545 ============================================================================== --- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/AxisConfiguration.java (original) +++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/AxisConfiguration.java Fri Jan 12 02:53:25 2007 @@ -167,13 +167,14 @@ /** * Register a messageFormatter implementation against a content type. - * This is used by Axis2 to support serialization of different message formats. + * This is used by Axis2 to support serialization of messages to different + * message formats. (Eg: JSON) * @param contentType * @param messageFormatter */ public void addMessageFormatter(String contentType, String messageFormatter) { - messageBuilders.put(contentType, messageFormatter); + messageFormatters.put(contentType, messageFormatter); } /** Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/MessageFormatter.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/MessageFormatter.java?view=diff&rev=495545&r1=495544&r2=495545 ============================================================================== --- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/MessageFormatter.java (original) +++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/MessageFormatter.java Fri Jan 12 02:53:25 2007 @@ -1,3 +1,18 @@ +/* + * 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; import java.io.OutputStream; @@ -5,6 +20,22 @@ import org.apache.axis2.AxisFault; +/** + *

+ * MessageFormatter implementations are used by Axis2 to support serialization + * of messages to different message formats. (Eg: JSON). Users can register + * MessageFormatter implementations against a message type using the axis2.xml. + * Message type for a message can be specified by setting the "messageType" + * property in the MessageContext. This can also be given as a parameter in the + * service.xml/axis2.xml for a per service based/engine wide configuration. + *

+ *

+ * + * + * + *

+ */ public interface MessageFormatter { public long getContentLength(); Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/TransportUtils.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/TransportUtils.java?view=diff&rev=495545&r1=495544&r2=495545 ============================================================================== --- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/TransportUtils.java (original) +++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/TransportUtils.java Fri Jan 12 02:53:25 2007 @@ -19,6 +19,9 @@ import java.io.InputStream; import java.io.OutputStream; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.net.URL; import javax.xml.parsers.FactoryConfigurationError; import javax.xml.stream.XMLStreamException; @@ -38,9 +41,13 @@ import org.apache.axis2.Constants; import org.apache.axis2.context.MessageContext; import org.apache.axis2.context.OperationContext; +import org.apache.axis2.description.Parameter; import org.apache.axis2.i18n.Messages; import org.apache.axis2.transport.http.HTTPConstants; +import org.apache.axis2.transport.http.SOAPMessageFormatter; import org.apache.axis2.util.Builder; +import org.apache.axis2.util.JavaUtils; +import org.apache.axis2.util.Loader; public class TransportUtils { @@ -206,5 +213,86 @@ } else { throw new AxisFault(Messages.getMessage("outMessageNull")); } + } + + /** + * Initial work for a builder selector which selects the builder for a given message format based on the the content type of the recieved message. + * content-type to builder mapping can be specified through the Axis2.xml. + * @param contentType + * @param msgContext + * @return the builder registered against the given content-type + * @throws AxisFault + */ + public static MessageFormatter getMessageFormatter( + MessageContext msgContext, String soapActionString, + OMOutputFormat format, URL targetURL) throws AxisFault { + MessageFormatter messageFormatter = null; + String messageFormatString = getMessageFormatterProperty(msgContext); + if (messageFormatString != null) { + String formatterClassName = msgContext.getConfigurationContext() + .getAxisConfiguration().getMessageFormatter( + messageFormatString); + if (formatterClassName != null) { + try { + Class formatterClass = Loader.loadClass(formatterClassName); + Constructor constructor = formatterClass + .getConstructor(new Class[] {MessageContext.class, String.class, + OMOutputFormat.class, URL.class}); + messageFormatter = (MessageFormatter) constructor + .newInstance(new Object[] { msgContext, + soapActionString, format, targetURL }); + } catch (ClassNotFoundException e) { + throw new AxisFault("Specified Builder class (" + + formatterClassName + ") cannot be found.", e); + } catch (InstantiationException e) { + throw new AxisFault( + "Cannot instantiate the specified Builder Class : " + + formatterClassName + ".", e); + } catch (IllegalAccessException e) { + throw new AxisFault( + "Cannot instantiate the specified Builder Class : " + + formatterClassName + ".", e); + } catch (SecurityException e) { + throw new AxisFault( + "Permission problem when instantiating the specified Builder Class : " + + formatterClassName + ".", e); + } catch (NoSuchMethodException e) { + throw new AxisFault( + "Required constructor is not found in the specified Builder Class : " + + formatterClassName + ".", e); + } catch (IllegalArgumentException e) { + throw new AxisFault( + "Required constructor is not found in the specified Builder Class : " + + formatterClassName + ".", e); + } catch (InvocationTargetException e) { + throw new AxisFault( + "Required constructor is not found in the specified Builder Class : " + + formatterClassName + ".", e); + } + } + } + if (messageFormatter == null) { + // Lets default to SOAP formatter + messageFormatter = new SOAPMessageFormatter(msgContext, + soapActionString, format, targetURL); + } + return messageFormatter; + } + + public static String getMessageFormatterProperty(MessageContext msgContext) { + String messageFormatterProperty = null; + Object property = msgContext + .getProperty(Constants.Configuration.MESSAGE_TYPE); + if (property != null) { + messageFormatterProperty = (String) property; + } + if (messageFormatterProperty == null) { + Parameter parameter = msgContext + .getParameter(Constants.Configuration.MESSAGE_TYPE); + if (parameter != null) { + messageFormatterProperty = (String) parameter.getValue(); + } + } + return messageFormatterProperty; } } Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/CommonsHTTPTransportSender.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/CommonsHTTPTransportSender.java?view=diff&rev=495545&r1=495544&r2=495545 ============================================================================== --- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/CommonsHTTPTransportSender.java (original) +++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/CommonsHTTPTransportSender.java Fri Jan 12 02:53:25 2007 @@ -139,6 +139,7 @@ public InvocationResponse invoke(MessageContext msgContext) throws AxisFault { try { OMOutputFormat format = new OMOutputFormat(); +// if (!msgContext.isDoingMTOM()) msgContext.setDoingMTOM(HTTPTransportUtils.doWriteMTOM(msgContext)); msgContext.setDoingSwA(HTTPTransportUtils.doWriteSwA(msgContext)); msgContext.setDoingREST(HTTPTransportUtils.isDoingREST(msgContext)); @@ -146,6 +147,12 @@ format.setDoOptimize(msgContext.isDoingMTOM()); format.setDoingSWA(msgContext.isDoingSwA()); format.setCharSetEncoding(HTTPTransportUtils.getCharSetEncoding(msgContext)); + + Object mimeBoundaryProperty = msgContext.getProperty(Constants.Configuration.MIME_BOUNDARY); + if (mimeBoundaryProperty != null) + { + format.setMimeBoundary((String)mimeBoundaryProperty); + } // Trasnport URL can be different from the WSA-To. So processing // that now. Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/HTTPTransportUtils.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/HTTPTransportUtils.java?view=diff&rev=495545&r1=495544&r2=495545 ============================================================================== --- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/HTTPTransportUtils.java (original) +++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/HTTPTransportUtils.java Fri Jan 12 02:53:25 2007 @@ -98,6 +98,11 @@ } public static boolean doWriteMTOM(MessageContext msgContext) { + // check whether isDoingMTOM is already true in the message context +// if (msgContext.isDoingMTOM()) { +// return true; +// } + boolean enableMTOM = false; Parameter parameter = msgContext.getParameter(Constants.Configuration.ENABLE_MTOM); if (parameter != null) { @@ -112,6 +117,10 @@ } public static boolean doWriteSwA(MessageContext msgContext) { + // check whether isDoingSWA is already true in the message context +// if (msgContext.isDoingSwA()) { +// return true; +// } boolean enableSwA = false; Parameter parameter = msgContext.getParameter(Constants.Configuration.ENABLE_SWA); if (parameter != null) { Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/SOAPOverHTTPSender.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/SOAPOverHTTPSender.java?view=diff&rev=495545&r1=495544&r2=495545 ============================================================================== --- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/SOAPOverHTTPSender.java (original) +++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/SOAPOverHTTPSender.java Fri Jan 12 02:53:25 2007 @@ -28,6 +28,7 @@ import org.apache.axis2.context.MessageContext; import org.apache.axis2.i18n.Messages; import org.apache.axis2.transport.MessageFormatter; +import org.apache.axis2.transport.TransportUtils; import org.apache.commons.httpclient.Header; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpStatus; @@ -55,8 +56,7 @@ charEncoding = MessageContext.DEFAULT_CHAR_SET_ENCODING; } - //Message Format Selector will come here - MessageFormatter messageFormatter = new SOAPMessageFormatter( + MessageFormatter messageFormatter = TransportUtils.getMessageFormatter( msgContext, soapActionString, format, url); url = messageFormatter.getTargetAddress(); postMethod.setPath(url.getPath()); Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/MessageContextBuilder.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/MessageContextBuilder.java?view=diff&rev=495545&r1=495544&r2=495545 ============================================================================== --- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/MessageContextBuilder.java (original) +++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/MessageContextBuilder.java Fri Jan 12 02:53:25 2007 @@ -78,6 +78,9 @@ // Setting the charater set encoding newmsgCtx.setProperty(Constants.Configuration.CHARACTER_SET_ENCODING, inMessageContext.getProperty(Constants.Configuration.CHARACTER_SET_ENCODING)); + //Setting the message type property + newmsgCtx.setProperty(Constants.Configuration.MESSAGE_TYPE, + inMessageContext.getProperty(Constants.Configuration.MESSAGE_TYPE)); newmsgCtx.setDoingREST(inMessageContext.isDoingREST()); newmsgCtx.setOperationContext(inMessageContext.getOperationContext()); Modified: webservices/axis2/trunk/java/modules/kernel/test-resources/deployment/messageFormatterTest/axis2.xml URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/test-resources/deployment/messageFormatterTest/axis2.xml?view=diff&rev=495545&r1=495544&r2=495545 ============================================================================== --- webservices/axis2/trunk/java/modules/kernel/test-resources/deployment/messageFormatterTest/axis2.xml (original) +++ webservices/axis2/trunk/java/modules/kernel/test-resources/deployment/messageFormatterTest/axis2.xml Fri Jan 12 02:53:25 2007 @@ -109,10 +109,10 @@ - - + - + Modified: webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/deployment/MessageFormatterDeploymentTest.java URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/deployment/MessageFormatterDeploymentTest.java?view=diff&rev=495545&r1=495544&r2=495545 ============================================================================== --- webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/deployment/MessageFormatterDeploymentTest.java (original) +++ webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/deployment/MessageFormatterDeploymentTest.java Fri Jan 12 02:53:25 2007 @@ -42,8 +42,8 @@ File xml = new File(xmlFile); FileSystemConfigurator fsc = new FileSystemConfigurator(repo.getAbsolutePath(), xml.getAbsolutePath()); AxisConfiguration axisConfig = fsc.getAxisConfiguration(); - String className = axisConfig.getMessageBuilder("application/soap+xml"); - assertEquals(className,"org.apache.axis2.transport.http.SOAPMessageFormatter"); + String className = axisConfig.getMessageFormatter("application/soap+xml"); + assertEquals("org.apache.axis2.transport.http.SOAPMessageFormatter",className); } public void testBuilderSelectionInvalidEntry() { --------------------------------------------------------------------- To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org For additional commands, e-mail: axis-cvs-help@ws.apache.org