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&gt
> ;<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]

Reply via email to