线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:1当我运行我的Web服务客户端时

时间:2013-04-08 12:16:16

标签: axis2 rampart

我创建一个名为'testUpdate'的动态Web项目(当然我不会忘记将动态Web模块版本更改为2.5,在配置中我选择Axis 2 Web服务

  1. 我在动态网络项目中添加了这两个类:
  2. SimpleService .java和PWCBHandler.java

    1. 我右键单击SimpleService.java - >新的 - >其他 - >用于创建我的Web服务的Web服务

    2. 我不会忘记将所有jar文件从rampart发行版复制到testUpdate / WebContent / WEB_INF / lib和所有.mar模块到testUpdate / WebContent / WEB_INF / modules

    3. 我更改了services.xml文件,使其看起来像

      <service name="SimpleService" >
      <module ref="rampart" />
      <Description>
      
      </Description>
      <messageReceivers>
          <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
          <messageReceiver  mep="http://www.w3.org/2004/08/wsdl/in-out"  class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
      </messageReceivers>
      <parameter name="ServiceClass" locked="false">com.gismo.SimpleService</parameter>
          <parameter name="InflowSecurity">
          <action>
              <items>UsernameToken</items>
              <passwordCallbackClass>com.gismo.PWCBHandler</passwordCallbackClass>
          </action>
      </parameter>
      </service>
      
    4. 我右键单击testUpdate - &gt; RUN AS _&gt;在服务器上运行(我的Web服务已成功部署)

    5. 档案 - &gt;新 - &gt;其他 - &gt; Web服务客户端

    6. 并在服务定义中粘贴SimpleService的wsdl文件的URL

      http://localhost:9091/testUpdate/services/SimpleService?wsdl

      1. 我将testcl.java类添加到我的Web服务客户端。这是代码

        public class testCL {
        
        public static void main(String[] args) throws Exception {
        
        if (args.length != 2) {
        
            System.out.println(args.length);
            System.out
                    .println("Usage: $java Client endpoint_address client_repo_path");
        }
        
        ConfigurationContext ctx = ConfigurationContextFactory
                .createConfigurationContextFromFileSystem(args[1], args[1]
                        + "/conf/axis2.xml");
        
        ServiceClient client = new ServiceClient(ctx, null);
        Options options = new Options();
        options.setAction("urn:echo");
        options.setTo(new EndpointReference(args[0]));
        client.setOptions(options);
        
        OMElement response = client.sendReceive(getPayload("Hello world"));
        
        System.out.println(response);
        }
        
          private static OMElement getPayload(String value) {
         OMFactory factory = OMAbstractFactory.getOMFactory();
         OMNamespace ns = factory.createOMNamespace("com.gismo/xsd", "ns1");
         OMElement elem = factory.createOMElement("echo", ns);
         OMElement childElem = factory.createOMElement("param0", null);
         childElem.setText(value);
         elem.addChild(childElem);
         return elem;
        }
        }
        
      2. 我不会忘记更改webSercice_client / WebContent / axis2-web / conf / axis2.xml并添加

         <module ref="rampart"/>
         <parameter name="OutflowSecurity">
          <action>
            <items>UsernameToken</items>
            <user>bob</user>
             <passwordCallbackClass>com.gismo.PWCBHandler</passwordCallbackClass>
          </action>
         </parameter>
        
      3. 但是当我将testCl作为Java Application运行时,它给了我一个例外

        用法:$ java Client endpoint_address client_repo_path 线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:1     在com.gismo.testcl.main(testcl.java:24)

1 个答案:

答案 0 :(得分:1)

我的通灵调试能力告诉我你在没有提供两个命令行参数的情况下运行它。您可以在程序输出中看到错误消息“用法:$ java Client endpoint_address client_repo_path”,这意味着您没有提供两个命令行参数,因此args[1]可能无效。检查命令行参数的数量后,您的程序不会退出,因此在抱怨程序运行不正确后,它会尝试访问args[1]

if (args.length != 2) {

    System.out.println(args.length);
    System.out
            .println("Usage: $java Client endpoint_address client_repo_path");
}

ConfigurationContext ctx = ConfigurationContextFactory
        .createConfigurationContextFromFileSystem(args[1], args[1]
                + "/conf/axis2.xml");