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]