我创建一个名为'testUpdate'的动态Web项目(当然我不会忘记将动态Web模块版本更改为2.5,在配置中我选择Axis 2 Web服务
SimpleService .java和PWCBHandler.java
我右键单击SimpleService.java - >新的 - >其他 - >用于创建我的Web服务的Web服务
我不会忘记将所有jar文件从rampart发行版复制到testUpdate / WebContent / WEB_INF / lib和所有.mar模块到testUpdate / WebContent / WEB_INF / modules
我更改了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>
我右键单击testUpdate - &gt; RUN AS _&gt;在服务器上运行(我的Web服务已成功部署)
档案 - &gt;新 - &gt;其他 - &gt; Web服务客户端
并在服务定义中粘贴SimpleService的wsdl文件的URL
(http://localhost:9091/testUpdate/services/SimpleService?wsdl
)
我将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;
}
}
我不会忘记更改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>
但是当我将testCl作为Java Application运行时,它给了我一个例外
用法:$ java Client endpoint_address client_repo_path 线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:1 在com.gismo.testcl.main(testcl.java:24)
答案 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");