Return-Path: Delivered-To: apmail-ws-axis-dev-archive@www.apache.org Received: (qmail 44190 invoked from network); 2 Aug 2004 06:15:12 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur-2.apache.org with SMTP; 2 Aug 2004 06:15:12 -0000 Received: (qmail 35451 invoked by uid 500); 2 Aug 2004 06:15:09 -0000 Delivered-To: apmail-ws-axis-dev-archive@ws.apache.org Received: (qmail 35420 invoked by uid 500); 2 Aug 2004 06:15:09 -0000 Mailing-List: contact axis-cvs-help@ws.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: list-post: Delivered-To: mailing list axis-cvs@ws.apache.org Received: (qmail 35406 invoked by uid 99); 2 Aug 2004 06:15:09 -0000 X-ASF-Spam-Status: No, hits=0.5 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [209.237.227.194] (HELO minotaur.apache.org) (209.237.227.194) by apache.org (qpsmtpd/0.27.1) with SMTP; Sun, 01 Aug 2004 23:15:08 -0700 Received: (qmail 44112 invoked by uid 1852); 2 Aug 2004 06:15:08 -0000 Date: 2 Aug 2004 06:15:08 -0000 Message-ID: <20040802061508.44111.qmail@minotaur.apache.org> From: samisa@apache.org To: ws-axis-cvs@apache.org Subject: cvs commit: ws-axis/c/docs LibWWW-transport-HOWTO.txt X-Virus-Checked: Checked X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N samisa 2004/08/01 23:15:07 Added: c/docs LibWWW-transport-HOWTO.txt Log: HOWTO on LibWWW trasport Revision Changes Path 1.1 ws-axis/c/docs/LibWWW-transport-HOWTO.txt Index: LibWWW-transport-HOWTO.txt =================================================================== /* * Copyright 2003-2004 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. * * * @author Samisa Abeysinghe (sabeysinghe@virtusa.com) * @author Lahiru * * Last Updated: 02 August 2004 (Samisa) */ The implementation of SOAPTransport interface using LibWWW. Getting LibWWW transport working on Linux 1. Install LibWWW, 2. Build Axis C++ with libWWW support and 3. Set Transport_http:[AXIS_CPP_DEPLOY_FOLDER]/lib/libaxis_LibWWWTransport.so in axiscpp.conf. 1. Installing LibWWW You can find LibWWW build/installation instructions in LibWWW documentation. The following are few hints specific to Axis C++ libWWW transport. i. Use of 100-continue I observed that the transport is much faster when it is used without 100-continue. However, to disable 100-continue, LibWWW need to be built with -–with-extension option (./configure --with-extension) By default LibWWW comes with 100-continue enabled. ii. Thread safety By default, LibWWW build is not thread safe. If you wish to use LibWWW transport in a threaded environment you have to enable reentrant system calls in the LibWWW build. (./configure --enable-reentrant) iii. Use of Expat XML parser LibWWW library uses the Expat parser by default for XML related stuff. However, these XML related features are not required for Axis C++ transport. One could configure the LibWWW build with ./configure --with-expat=no. The set of libs required for Axis C++ LibWWW transport are: -lwwwinit -lwwwapp -lwwwhtml -lwwwtelnet -lwwwnews -lwwwhttp -lwwwmime -lwwwgopher -lwwwftp -lwwwfile -lwwwdir -lwwwcache -lwwwstream -lwwwmux -lwwwtrans -lwwwcore -lwwwutils (One could argue that some libs like -lwwwgopher are not required at all. However, -lwwwinit have references those, hence cannot be dropped while linking. One would need to change LibWWW code to remove those unwanted dependencies, which I did not want to do here.) I have only used only the must be used libs in src/transport/libwww/Makefile.am. In short, when building LibWWW on your system use: ./configure --with-extension --enable-reentrant --with-expat=no \ --prefix=[where you want LibWWW installed] For more information on LibWWW please see http://www.w3.org/Library/User/ 2. Building Axis C++ with LibWWW support You can use --enable-libwww option when configuring Axis C++. By default LibWWW is enabled. Use --enable-libwww=yes to enable --enable-libwww=no to disable. The Axis C++ server side fails to work with 100-continue. Axis Java server side is capable of managing 100-continue. This is the default mode used in LibWWW. I used a macro in src/transport/libwww/Makefile.am to enable/disable 100-continue. (use -DHT_EXT_CONTINUE to enable or -UHT_EXT_CONTINUE to disable in AM_CPPFLAGS setting) As I mentioned earlier, the transport is much faster when it is used without 100-continue. However, to disable 100-continue, LibWWW need to be built with extension support. (please see section 1 above) You do not need to bother about location of LibWWW headers and libraries, provided that you have done the LibWWW installation properly. (in other words libwww-config program need to be on your PATH) I have used libwww-config in the Makefile.am to pick LibWWW specific settings. 3. Using the LibWWW transport Once you build the library, you could use it by specifying the location of the lib in $AXIS_HOME/axiscpp.conf file. e.g. Transport_http:/usr/local/Axis/libs/libaxis_LibWWWTransport.so Notes: Thread Safety: http://www.w3.org/Library/User/Architecture/Events.html says “LibWWW is not posix thread safe but it uses a 'pseudo-thread' model based on non-blocking sockets and interleaved IO.” I did a bit of research and figured out how to make this implementation thread safe. I was able to successfully use the 'pseudo-thread' model of LibWWW and achieve thread safety. You could test the thread safety with the test in tests/client/threadSafe/. - Samisa... For Windows 1.Install libwww. 2.Copy the source header files in libwww which are in library/src to the c/src/transport/libwww. 3.copy the external header files in libwww which are in library/external to c/include/libwww. 4.copy the library files which are created while building the libwww to c/lib/libwww 5.Copy the gnu_regx.dll to path from libwww. 6.Build the AxisTransportLibwww VC project. 7.Copy the generated AxisTransport.dll to path 8.then run the samples. Lahiru