Hallo Mark, Thanks for your reply. I must now see my web.xml file. I don't know excatly how to edit the web.xml such Deployment Descriptor file and server.xml such configuration file.
Best Feilong ----- Original Message ----- From: "Mark Thomas" <[EMAIL PROTECTED]> To: "'Tomcat Users List'" <[EMAIL PROTECTED]> Sent: Sunday, November 14, 2004 12:44 PM Subject: RE: Soap under Tomcat > I am not familiar with this particular tutorial but the problem appears to be > that your client is requesting /soap/rpcrouter but the servlet mapping in > web.xml indicates that the webapp is expcting /soap/servlet/rpcrouter. What the > root cuase of this mismatch might be I do not know. > > Mark > > > -----Original Message----- > > From: feilong [mailto:[EMAIL PROTECTED] > > Sent: Saturday, November 13, 2004 11:45 PM > > To: [EMAIL PROTECTED] > > Subject: Soap under Tomcat > > > > Hallo all, > > I am a beginner with programming web-service with soap > > protocol under Tomcat web server. > > I find a link > > http://www.onjava.com/pub/a/onjava/2002/02/27/tomcat.html?page=1 > > which introduce how to use soap in Tomcat and deploy web > > services and a simple client to call this web service > > I have followed each step what is showed in this article. All > > run succesfully. only the last step > > java onjava.CalcClient 96 95. I get the following exceptions, > > but unfortunately I can not understand such exceptions, I > > hope someone can indicate the reason for me > > ----------------------------------------------------------- > > Exception in thread "main" [SOAPException: > > faultCode=SOAP-ENV:Protocol; msg=Unsu > > pported response content type "text/html; > > charset=ISO-8859-1", must be > > : "text/xml". Response was: > > <html><head><title>Apache Tomcat/4.1.30 - > > Error report</tit > > le><STYLE><!--H1{font-family : > > sans-serif,Arial,Tahoma;color : white > > ;background-color : #0086b2;} H3{font-family : > > sans-serif,Arial,Tahoma;color : w > > hite;background-color : #0086b2;} BODY{font-family : > > sans-serif,Arial,Tahoma;col > > or : black;background-color : white;} B{color : > > white;background-color : #0086b2 > > ;} HR{color : #0086b2;} --></STYLE> > > </head><body><h1> > > HTTP Status 404 - /soap/rpcrouter</h1><HR > > size="1" noshade> > > ;<p><b>type</b> Status > > report</p><p><b>messa > > ge</b> > > <u>/soap/rpcrouter</u></p><p><b>descr > > iption</b> <u>The requested resource > > (/soap/rpcrouter) is not availa > > ble.</u></p><HR size="1" > > noshade><h3>Apache To > > mcat/4.1.30</h3></body></html> > > ] > > at org.apache.soap.rpc.Call.getEnvelopeString(Call.java:208) > > at org.apache.soap.rpc.Call.invoke(Call.java:255) > > at onjava.CalcClient.main(CalcClient.java:35) > > ---------------------------------------------------------- > > I put my java servlet classes and source code in > > D:\Programs\jakarta-tomcat-4.1.30\webapps\soap\WEB-INF\classes\onjava > > I can deploy the CalcService servlet in Tomcat Server. > > But when I run the CalcClient, get the error messages above. > > I guess since I didn't add anything in > > \jakarta-tomcat-4.1.30\webapps\soap\WEB-INF\web.xml > > descriptor file. This web.xml is automatic generated by > > soap.war while I run the Tomcat Server first time. I don't > > know how can I edit the > > original web.xml(Deployment Descriptor)if I add new servlet > > class with package onjava in > > webapps\soap\WEB-INF\classes\onjava\. > > Another DeploymentDescriptor.xml identifying soap-service > > under webapps\soap\WEB-INF\classes\onjava\ runs correctly > > since I can deploy this webservice. > > The soap\WEB-INF\web.xml looks like following > > ------------------------------------------------------------ > > <?xml version="1.0" encoding="ISO-8859-1"?> > > > > <!DOCTYPE web-app > > PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" > > "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd"> > > > > <web-app> > > <display-name>Apache-SOAP</display-name> > > <description>no description</description> > > <servlet> > > <servlet-name>rpcrouter</servlet-name> > > <display-name>Apache-SOAP RPC Router</display-name> > > <description>no description</description> > > > > <servlet-class>org.apache.soap.server.http.RPCRouterServlet</s > ervlet-class> > > <init-param> > > <param-name>faultListener</param-name> > > > > <param-value>org.apache.soap.server.DOMFaultListener</param-value> > > </init-param> > > </servlet> > > > > <servlet> > > <servlet-name>messagerouter</servlet-name> > > <display-name>Apache-SOAP Message Router</display-name> > > > > <servlet-class>org.apache.soap.server.http.MessageRouterServle > t</servlet-class> > > <init-param> > > <param-name>faultListener</param-name> > > > > <param-value>org.apache.soap.server.DOMFaultListener</param-value> > > </init-param> > > </servlet> > > > > <servlet-mapping> > > <servlet-name>rpcrouter</servlet-name> > > <url-pattern>/servlet/rpcrouter</url-pattern> > > </servlet-mapping> > > > > <servlet-mapping> > > <servlet-name>messagerouter</servlet-name> > > <url-pattern>/servlet/messagerouter</url-pattern> > > </servlet-mapping> > > </web-app> > > ------------------------------------------------------------ > > Another reason I guess is that I didn't edit anything in > > D:\Programs\jakarta-tomcat-4.1.30\conf\server.xml while new > > webapplicatin soap comes. I can't edit such configuration > > files. How can I learn to write and edit such Deployment > > Descriptor file and server configuration files. > > The server.xml looks like: > > ----------------------------------------------------------- > > <!-- Example Server Configuration File --> > > <!-- Note that component elements are nested corresponding to their > > parent-child relationships with each other --> > > > > <!-- A "Server" is a singleton element that represents the entire JVM, > > which may contain one or more "Service" instances. The Server > > listens for a shutdown command on the indicated port. > > > > Note: A "Server" is not itself a "Container", so you may not > > define subcomponents such as "Valves" or "Loggers" at this level. > > --> > > > > <Server port="8005" shutdown="SHUTDOWN" debug="0"> > > > > > > <!-- Comment these entries out to disable JMX MBeans support --> > > <!-- You may also configure custom components (e.g. > > Valves/Realms) by > > including your own mbean-descriptor file(s), and setting the > > "descriptors" attribute to point to a ';' seperated > > list of paths > > (in the ClassLoader sense) of files to add to the default list. > > e.g. descriptors="/com/myfirm/mypackage/mbean-descriptor.xml" > > --> > > <Listener > > className="org.apache.catalina.mbeans.ServerLifecycleListener" > > debug="0"/> > > <Listener > > className="org.apache.catalina.mbeans.GlobalResourcesLifecycle > > Listener" > > debug="0"/> > > > > <!-- Global JNDI resources --> > > <GlobalNamingResources> > > > > <!-- Test entry for demonstration purposes --> > > <Environment name="simpleValue" type="java.lang.Integer" > > value="30"/> > > > > <!-- Editable user database that can also be used by > > UserDatabaseRealm to authenticate users --> > > <Resource name="UserDatabase" auth="Container" > > type="org.apache.catalina.UserDatabase" > > description="User database that can be updated and saved"> > > </Resource> > > <ResourceParams name="UserDatabase"> > > <parameter> > > <name>factory</name> > > > > <value>org.apache.catalina.users.MemoryUserDatabaseFactory</value> > > </parameter> > > <parameter> > > <name>pathname</name> > > <value>conf/tomcat-users.xml</value> > > </parameter> > > </ResourceParams> > > > > </GlobalNamingResources> > > > > <!-- A "Service" is a collection of one or more > > "Connectors" that share > > a single "Container" (and therefore the web > > applications visible > > within that Container). Normally, that Container is > > an "Engine", > > but this is not required. > > > > Note: A "Service" is not itself a "Container", so you may not > > define subcomponents such as "Valves" or "Loggers" at > > this level. > > --> > > > > <!-- Define the Tomcat Stand-Alone Service --> > > <Service name="Tomcat-Standalone"> > > > > <!-- A "Connector" represents an endpoint by which > > requests are received > > and responses are returned. Each Connector passes > > requests on to the > > associated "Container" (normally an Engine) for processing. > > > > By default, a non-SSL HTTP/1.1 Connector is > > established on port 8080. > > You can also enable an SSL HTTP/1.1 Connector on port 8443 by > > following the instructions below and uncommenting > > the second Connector > > entry. SSL support requires the following steps > > (see the SSL Config > > HOWTO in the Tomcat 4.0 documentation bundle for > > more detailed > > instructions): > > * Download and install JSSE 1.0.2 or later, and put > > the JAR files > > into "$JAVA_HOME/jre/lib/ext". > > * Execute: > > %JAVA_HOME%\bin\keytool -genkey -alias tomcat > > -keyalg RSA (Windows) > > $JAVA_HOME/bin/keytool -genkey -alias tomcat > > -keyalg RSA (Unix) > > with a password value of "changeit" for both the > > certificate and > > the keystore itself. > > > > By default, DNS lookups are enabled when a web > > application calls > > request.getRemoteHost(). This can have an adverse impact on > > performance, so you can disable it by setting the > > "enableLookups" attribute to "false". When DNS > > lookups are disabled, > > request.getRemoteHost() will return the String version of the > > IP address of the remote client. > > --> > > > > <!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 8080 --> > > <Connector className="org.apache.coyote.tomcat4.CoyoteConnector" > > port="8080" minProcessors="5" maxProcessors="75" > > enableLookups="true" redirectPort="8443" > > acceptCount="100" debug="0" connectionTimeout="20000" > > useURIValidationHack="false" > > disableUploadTimeout="true" /> > > <!-- Note : To disable connection timeouts, set > > connectionTimeout value > > to 0 --> > > > > <!-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 --> > > <!-- > > <Connector className="org.apache.coyote.tomcat4.CoyoteConnector" > > port="8443" minProcessors="5" maxProcessors="75" > > enableLookups="true" > > acceptCount="100" debug="0" scheme="https" secure="true" > > useURIValidationHack="false" > > disableUploadTimeout="true"> > > <Factory > > className="org.apache.coyote.tomcat4.CoyoteServerSocketFactory" > > clientAuth="false" protocol="TLS" /> > > </Connector> > > --> > > > > <!-- Define a Coyote/JK2 AJP 1.3 Connector on port 8009 --> > > <Connector className="org.apache.coyote.tomcat4.CoyoteConnector" > > port="8009" minProcessors="5" maxProcessors="75" > > enableLookups="true" redirectPort="8443" > > acceptCount="10" debug="0" connectionTimeout="0" > > useURIValidationHack="false" > > > > protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler"/> > > > > <!-- Define an AJP 1.3 Connector on port 8009 --> > > <!-- > > <Connector className="org.apache.ajp.tomcat4.Ajp13Connector" > > port="8009" minProcessors="5" maxProcessors="75" > > acceptCount="10" debug="0"/> > > --> > > > > <!-- Define a Proxied HTTP/1.1 Connector on port 8082 --> > > <!-- See proxy documentation for more information about > > using this. --> > > <!-- > > <Connector className="org.apache.coyote.tomcat4.CoyoteConnector" > > port="8082" minProcessors="5" maxProcessors="75" > > enableLookups="true" > > acceptCount="100" debug="0" connectionTimeout="20000" > > proxyPort="80" useURIValidationHack="false" > > disableUploadTimeout="true" /> > > --> > > > > <!-- Define a non-SSL legacy HTTP/1.1 Test Connector on > > port 8083 --> > > <!-- > > <Connector > > className="org.apache.catalina.connector.http.HttpConnector" > > port="8083" minProcessors="5" maxProcessors="75" > > enableLookups="true" redirectPort="8443" > > acceptCount="10" debug="0" /> > > --> > > > > <!-- Define a non-SSL HTTP/1.0 Test Connector on port 8084 --> > > <!-- > > <Connector > > className="org.apache.catalina.connector.http10.HttpConnector" > > port="8084" minProcessors="5" maxProcessors="75" > > enableLookups="true" redirectPort="8443" > > acceptCount="10" debug="0" /> > > --> > > > > <!-- An Engine represents the entry point (within > > Catalina) that processes > > every request. The Engine implementation for Tomcat > > stand alone > > analyzes the HTTP headers included with the request, > > and passes them > > on to the appropriate Host (virtual host). --> > > > > <!-- You should set jvmRoute to support load-balancing > > via JK/JK2 ie : > > <Engine name="Standalone" defaultHost="localhost" > > debug="0" jvmRoute="jvm1"> > > --> > > > > <!-- Define the top level container in our container hierarchy --> > > <Engine name="Standalone" defaultHost="localhost" debug="0"> > > > > <!-- The request dumper valve dumps useful debugging > > information about > > the request headers and cookies that were > > received, and the response > > headers and cookies that were sent, for all > > requests received by > > this instance of Tomcat. If you care only about > > requests to a > > particular virtual host, or a particular > > application, nest this > > element inside the corresponding <Host> or > > <Context> entry instead. > > > > For a similar mechanism that is portable to all Servlet 2.3 > > containers, check out the "RequestDumperFilter" > > Filter in the > > example application (the source for this filter > > may be found in > > "$CATALINA_HOME/webapps/examples/WEB-INF/classes/filters"). > > > > Request dumping is disabled by default. Uncomment > > the following > > element to enable it. --> > > <!-- > > <Valve > > className="org.apache.catalina.valves.RequestDumperValve"/> > > --> > > > > <!-- Global logger unless overridden at lower levels --> > > <Logger className="org.apache.catalina.logger.FileLogger" > > prefix="catalina_log." suffix=".txt" > > timestamp="true"/> > > > > <!-- Because this Realm is here, an instance will be > > shared globally --> > > > > <!-- This Realm uses the UserDatabase configured in the > > global JNDI > > resources under the key "UserDatabase". Any edits > > that are performed against this UserDatabase are > > immediately > > available for use by the Realm. --> > > <Realm className="org.apache.catalina.realm.UserDatabaseRealm" > > debug="0" resourceName="UserDatabase"/> > > > > <!-- Comment out the old realm but leave here for now in case we > > need to go back quickly --> > > <!-- > > <Realm className="org.apache.catalina.realm.MemoryRealm" /> > > --> > > > > <!-- Replace the above Realm with one of the following > > to get a Realm > > stored in a database and accessed via JDBC --> > > > > <!-- > > <Realm className="org.apache.catalina.realm.JDBCRealm" > > debug="99" > > driverName="org.gjt.mm.mysql.Driver" > > connectionURL="jdbc:mysql://localhost/authority" > > connectionName="test" connectionPassword="test" > > userTable="users" userNameCol="user_name" > > userCredCol="user_pass" > > userRoleTable="user_roles" roleNameCol="role_name" /> > > --> > > > > <!-- > > <Realm className="org.apache.catalina.realm.JDBCRealm" > > debug="99" > > driverName="oracle.jdbc.driver.OracleDriver" > > connectionURL="jdbc:oracle:thin:@ntserver:1521:ORCL" > > connectionName="scott" connectionPassword="tiger" > > userTable="users" userNameCol="user_name" > > userCredCol="user_pass" > > userRoleTable="user_roles" roleNameCol="role_name" /> > > --> > > > > <!-- > > <Realm className="org.apache.catalina.realm.JDBCRealm" > > debug="99" > > driverName="sun.jdbc.odbc.JdbcOdbcDriver" > > connectionURL="jdbc:odbc:CATALINA" > > userTable="users" userNameCol="user_name" > > userCredCol="user_pass" > > userRoleTable="user_roles" roleNameCol="role_name" /> > > --> > > > > <!-- Define the default virtual host --> > > <Host name="localhost" debug="0" appBase="webapps" > > unpackWARs="true" autoDeploy="true"> > > > > <!-- Normally, users must authenticate themselves to > > each web app > > individually. Uncomment the following entry if > > you would like > > a user to be authenticated the first time they > > encounter a > > resource protected by a security constraint, and > > then have that > > user identity maintained across *all* web > > applications contained > > in this virtual host. --> > > <!-- > > <Valve > > className="org.apache.catalina.authenticator.SingleSignOn" > > debug="0"/> > > --> > > > > <!-- Access log processes all requests for this > > virtual host. By > > default, log files are created in the "logs" > > directory relative to > > $CATALINA_HOME. If you wish, you can specify a different > > directory with the "directory" attribute. > > Specify either a relative > > (to $CATALINA_HOME) or absolute path to the > > desired directory. > > --> > > <!-- > > <Valve className="org.apache.catalina.valves.AccessLogValve" > > directory="logs" > > prefix="localhost_access_log." suffix=".txt" > > pattern="common" resolveHosts="false"/> > > --> > > > > <!-- Logger shared by all Contexts related to this > > virtual host. By > > default (when using FileLogger), log files are > > created in the "logs" > > directory relative to $CATALINA_HOME. If you > > wish, you can specify > > a different directory with the "directory" > > attribute. Specify either a > > relative (to $CATALINA_HOME) or absolute path to > > the desired > > directory.--> > > <Logger className="org.apache.catalina.logger.FileLogger" > > directory="logs" prefix="localhost_log." > > suffix=".txt" > > timestamp="true"/> > > > > <!-- Define properties for each web application. > > This is only needed > > if you want to set non-default properties, or > > have web application > > document roots in places other than the virtual > > host's appBase > > directory. --> > > > > <!-- Tomcat Root Context --> > > <!-- > > <Context path="" docBase="ROOT" debug="0"/> > > --> > > > > <!-- Tomcat Examples Context --> > > <Context path="/examples" docBase="examples" debug="0" > > reloadable="true" crossContext="true"> > > <Logger className="org.apache.catalina.logger.FileLogger" > > prefix="localhost_examples_log." suffix=".txt" > > timestamp="true"/> > > <Ejb name="ejb/EmplRecord" type="Entity" > > home="com.wombat.empl.EmployeeRecordHome" > > remote="com.wombat.empl.EmployeeRecord"/> > > > > <!-- If you wanted the examples app to be able to edit the > > user database, you would uncomment the following entry. > > Of course, you would want to enable security on the > > application as well, so this is not done by default! > > The database object could be accessed like this: > > > > Context initCtx = new InitialContext(); > > Context envCtx = (Context) > > initCtx.lookup("java:comp/env"); > > UserDatabase database = > > (UserDatabase) envCtx.lookup("userDatabase"); > > --> > > <!-- > > <ResourceLink name="userDatabase" global="UserDatabase" > > type="org.apache.catalina.UserDatabase"/> > > --> > > > > > > <!-- PersistentManager: Uncomment the section below > > to test Persistent > > Sessions. > > > > saveOnRestart: If true, all active sessions > > will be saved > > to the Store when Catalina is shutdown, regardless of > > other settings. All Sessions found in the > > Store will be > > loaded on startup. Sessions past their expiration are > > ignored in both cases. > > maxActiveSessions: If 0 or greater, having too > > many active > > sessions will result in some being swapped > > out. minIdleSwap > > limits this. -1 or 0 means unlimited > > sessions are allowed. > > If it is not possible to swap sessions new > > sessions will > > be rejected. > > This avoids thrashing when the site is highly active. > > minIdleSwap: Sessions must be idle for at > > least this long > > (in seconds) before they will be swapped out due to > > activity. > > 0 means sessions will almost always be > > swapped out after > > use - this will be noticeably slow for your users. > > maxIdleSwap: Sessions will be swapped out if > > idle for this > > long (in seconds). If minIdleSwap is higher, > > then it will > > override this. This isn't exact: it is > > checked periodically. > > -1 means sessions won't be swapped out for > > this reason, > > although they may be swapped out for > > maxActiveSessions. > > If set to >= 0, guarantees that all sessions > > found in the > > Store will be loaded on startup. > > maxIdleBackup: Sessions will be backed up > > (saved to the Store, > > but left in active memory) if idle for this > > long (in seconds), > > and all sessions found in the Store will be > > loaded on startup. > > If set to -1 sessions will not be backed up, > > 0 means they > > should be backed up shortly after being used. > > > > To clear sessions from the Store, set > > maxActiveSessions, maxIdleSwap, > > and minIdleBackup all to -1, saveOnRestart to > > false, then restart > > Catalina. > > --> > > <!-- > > <Manager > > className="org.apache.catalina.session.PersistentManager" > > debug="0" > > saveOnRestart="true" > > maxActiveSessions="-1" > > minIdleSwap="-1" > > maxIdleSwap="-1" > > maxIdleBackup="-1"> > > <Store > > className="org.apache.catalina.session.FileStore"/> > > </Manager> > > --> > > <Environment name="maxExemptions" type="java.lang.Integer" > > value="15"/> > > <Parameter name="context.param.name" > > value="context.param.value" > > override="false"/> > > <Resource name="jdbc/EmployeeAppDb" auth="SERVLET" > > type="javax.sql.DataSource"/> > > <ResourceParams name="jdbc/EmployeeAppDb"> > > > > <parameter><name>username</name><value>sa</value></parameter> > > > > <parameter><name>password</name><value></value></parameter> > > <parameter><name>driverClassName</name> > > <value>org.hsql.jdbcDriver</value></parameter> > > <parameter><name>url</name> > > <value>jdbc:HypersonicSQL:database</value></parameter> > > </ResourceParams> > > <Resource name="mail/Session" auth="Container" > > type="javax.mail.Session"/> > > <ResourceParams name="mail/Session"> > > <parameter> > > <name>mail.smtp.host</name> > > <value>localhost</value> > > </parameter> > > </ResourceParams> > > <ResourceLink name="linkToGlobalResource" > > global="simpleValue" > > type="java.lang.Integer"/> > > </Context> > > > > </Host> > > > > </Engine> > > > > </Service> > > > > > > </Server> > > --------------------------------------- > > > > Thanks in advance > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]