CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  Web Services / XML

soap-rpc 的小问题

楼主rainvoid()2006-03-20 11:39:23 在 Java / Web Services / XML 提问

初学web服务,简单的本地soap-rpc访问tomcat上的soap-rpc服务器端,环境:tomcat + apahce soap.并且apahce soap已经被部署到tomcat上了,我不太清楚我的soap-rpc服务器端代码和相应的部署描述符文件应该部署在那里?我现在的做法是把soap-rpc服务器端的代码部署到tomcat上成为一个独立的工程,把它的部署描述符文件放在了web.xml同级目录下,最后运行客户段访问时:客户端得到的Fault是:service   'urn:stock-onhand'   unknown , 而tomcat日之上写着:  
  SOAP   Service   Manager:   Unable   to   read   'DeployedServices.ds':assuming   fresh   start.  
   
  我该怎么部署这个soap-rpc服务器段的代码呢? 问题点数:20、回复次数:4Top

1 楼rainvoid()回复于 2006-03-21 09:41:10 得分 0

我顶!!!Top

2 楼rainvoid()回复于 2006-03-22 11:57:23 得分 0

解决了上面的问题,又出问题了,找是找到我的soap的服务端了,可是返回来的是个FAULT:在客户段打印出来时这样的:  
   
  Call   failed   due   to   a   SOAP   Fault:    
      Fault   Code       =   SOAP-ENV:Server.Exception:  
      Fault   String   =   org/apache/soap/SOAPException  
   
      toString:     [Attributes={}]   [faultCode=SOAP-ENV:Server.Exception:]   [faultString=org/apache/soap/SOAPException]   [faultActorURI=/soap/servlet/rpcrouter]   [DetailEntries=]   [FaultEntries=]  
   
  我没看到太多的有帮助的信息,于是修改了服务器段的代码,向日至里输出一些内容,可是不没有被执行,问题出在那里呢,这个异常好像是/soap/servlet/rpcrouter跑出的,我再apache   soap   admin上部署的参数是这样的:  
   
  ID   -   urn:stock-onhand    
  Scope   -   Application    
  Provider   Type   -   java    
  Provider   Class   -   com.weixin.web_service.soapRpc.StockQuantity    
  Use   Static   Class   -   false    
  Methods   -   getQty    
               
  我的服务器段代码   :  
              package   com.weixin.web_service.soapRpc;  
   
   
  import   org.apache.soap.Constants;  
  import   org.apache.soap.SOAPException;  
   
  public   class   StockQuantity{  
   
      public   int   getQty   (String   item)throws   SOAPException   {  
       
      System.out.println("111111111111");  
   
          int   inStockQty   =   (int)(Math.random()   *   (double)1000);  
   
          if   (item.equalsIgnoreCase("Fail")){  
          System.out.println("Fail----------------");  
                  throw   new   SOAPException(Constants.FAULT_CODE_SERVER,"Test   Fault");  
          }  
          System.out.println("22222222222222222222");  
   
          return   inStockQty;  
   
        }  
   
  }  
   
  客户段代码:  
   
   
  package   com.weixin.web_service.soapRpc;  
   
  import   java.net.*;  
  import   java.util.*;  
   
  import   org.apache.soap.Constants;  
  import   org.apache.soap.Fault;  
  import   org.apache.soap.rpc.Call;  
  import   org.apache.soap.rpc.Parameter;  
  import   org.apache.soap.rpc.Response;  
   
   
  public   class   CheckStock   {  
   
          private   static   final   String   DEFAULT_HOST_URL   =   "http://localhost:8080/soap/servlet/rpcrouter";  
          private   static   final   String   DEFAULT_ITEM   =   "Test";  
          private   static   final   String   URI   =   "urn:oreilly-jaws-samples";  
   
          //Member   variables  
          private   String   m_hostURL;  
          private   String   m_item;  
   
          public   CheckStock   (){  
                  m_hostURL   =   DEFAULT_HOST_URL;  
                  m_item         =   DEFAULT_ITEM;  
   
                  System.out.println();  
                  System.out.println(  
                          "______________________________________________________");  
                  System.out.println("Starting   CheckStock   client:");  
                  System.out.println("         host   url                 =   "   +   m_hostURL);  
                  System.out.println("         item                         =   "   +   m_item);  
                  System.out.println(  
                          "_______________________________________________________");  
                  System.out.println();  
          }  
   
          public   void   checkStock()   throws   Exception   {  
   
              //Build   the   call.  
              Call   call   =   new   Call   ();  
   
              //This   service   uses   standard   SOAP   encoding  
              String   encodingStyleURI   =   Constants.NS_URI_SOAP_ENC;  
              call.setEncodingStyleURI(encodingStyleURI);  
   
              //Set   the   target   URI  
              call.setTargetObjectURI   ("urn:stock-onhand");  
   
              //Set   the   method   name   to   invoke  
              call.setMethodName   ("getQty");  
   
              //Create   the   parameter   objects  
              Vector   params   =   new   Vector   ();  
              params.addElement   (new   Parameter("item",String.class,   m_item,   null));  
   
              //Set   the   parameters  
              call.setParams   (params);  
   
              //Invoke   the   service  
              Response   resp   =   call.invoke   (   new   URL(m_hostURL),"");  
   
              //Check   the   response  
              if   (resp   !=   null)   {  
                    if   (resp.generatedFault   ()){  
                          Fault   fault   =   resp.getFault   ();  
                          System.out.println   ("Call   failed   due   to   a   SOAP   Fault:   ");  
                          System.out.println   ("     Fault   Code       =   "   +   fault.getFaultCode   ());  
                          System.out.println   ("     Fault   String   =   "   +   fault.getFaultString   ());  
                          System.out.println   ("     toString:     "   +   fault.toString());  
                           
                    }   else   {  
                          Parameter   result   =   resp.getReturnValue   ();  
                          Integer   intresult   =   (Integer)   result.getValue();  
                          System.out.println   ("The   stock-on-hand   quantity   for   this   item   is:   "    
                                  +   intresult   );  
                    }  
              }  
          }  
   
          //  
          //   NOTE:   the   remainder   of   this   deals   with   reading   arguments  
          //  
          /**   Main   program   entry   point.   */  
   
          public   static   void   main(String   args[])   {  
           
           
                              //   Start   the   CheckStock   client  
                  try{  
                          CheckStock   stockClient   =   new   CheckStock();  
                          stockClient.checkStock();  
                  }catch(Exception   e){  
                                    e.printStackTrace();  
                  }  
          }  
   
   
  }  
   
  高手们请费点时间帮忙看看吧,分不够再加的!!!!谢谢啦  
  Top

3 楼xstom19(hh)回复于 2006-03-24 02:03:09 得分 0

我把你的源代码复制下来,在自己机器上能运行的(为了方便,我用默认包)  
  E:\Tomcat   5.0\webapps\soap\WEB-INF\classes>java   CheckStock  
   
  ______________________________________________________  
  Starting   CheckStock   client:  
          host   url                 =   http://localhost:8080/soap/servlet/rpcrouter  
          item                         =   Test  
  _______________________________________________________  
   
  The   stock-on-hand   quantity   for   this   item   is:   126  
  所以你的问题应该是的环境没有配置好,这个apache   soap   admin有bug的,用它配置是不能成功的。  
  下面是我的配置以及发布的过程:  
  1、把soap.war复制到%CATALINA_HOME%\webapps下  
  2、把activation.jar和mail.jar复制到%CATALINA_HOME%\common\lib下  
  3、重启tomcat(自动解压soap.war,%CATALINA_HOME%\webapps自动生成文件夹soap)  
  4、classpath设置:  
  .;D:\web\apache\xerces-1_4_4\xerces.jar;D:\web\apache\soap-bin-2.3.1\soap-2_3_1  
   
  \lib\soap.jar;%CATALINA_HOME%\common\lib\activation.jar;%CATALINA_HOME%  
   
  \common\lib\mail.jar;%CATALINA_HOME%\common\lib\servlet-api.jar;%JAVA_HOME%\lib\dt.jar;%  
   
  JAVA_HOME%\lib\tools.jar  
  5、在%CATALINA_HOME%\webapps\soap\WEB-INF\classes建立文件StockQuantity.java,CheckStock.java,编译  
  6、发布服务(http://localhost:8080/soap/admin/index.html的Deploy有BUG,使用命令行发布)  
  (1)编写deploy.xml  
  <isd:service    
        xmlns:isd="http://xml.apache.org/xml-soap/deployment"  
        id="urn:stock-onhand"   checkMustUnderstands="true">  
              <isd:provider   type="java"   scope="Application"   methods="getQty">  
              <isd:java   class="StockQuantity"   static="false"/>  
        </isd:provider>  
  </isd:service>  
  (2)把deploy.xml放到%CATALINA_HOME%\webapps\soap\WEB-INF\classes\org\apache\soap\server  
  (3)在命令行中改变目录为%CATALINA_HOME%\webapps\soap\WEB-INF\classes\org\apache\soap\server  
  (4)运行java   org.apache.soap.server.ServiceManagerClient   http://localhost:8080/soap/servlet/rpcrouter   deploy   deploy.xml  
  7、重启tomcat  
  8、运行CheckStock  
  Top

4 楼xstom19(hh)回复于 2006-03-25 12:43:42 得分 20

更正一下,那个apache   soap   admin没问题,是我自己不会用。  
  用两种方法发布服务都是可以的。Top

相关问题

  • soap的rpc调用?
  • SOAP
  • soap?
  • Soap Soap Soap Soap Soap Soap Soap Soap Soap Soap Soap Soap
  • rpc问题
  • the rpc server is unvaliable
  • Blaster Rpc Exploit
  • RPC 问题
  • SOAP (MS SOAP ToolKit)
  • win 2003 RPC修复?

关键词

  • soap
  • 服务器
  • 代码
  • apache
  • 文件
  • 客户
  • tomcat
  • servlet
  • checkstock
  • rpcrouter

得分解答快速导航

  • 帖主:rainvoid
  • xstom19

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo