java invoke 以及 webservice详解,求助 20

求一下每一步的详细解释(最好能对知识点稍作扩充),以及逻辑,满意后加分,谢谢,勿复制,谢谢publicstaticStringinvoke(Stringnamespace... 求一下每一步的详细解释(最好能对知识点稍作扩充),以及逻辑,满意后加分,谢谢,勿复制,谢谢
public static String invoke(String namespace, String method, String wsdl, Object[] params, String nsrsbh, String type)
{
try
{
Service service = new Service();
Call call = (Call) service.createCall();
call.setOperationName(new QName(namespace, method));
call.setTargetEndpointAddress(new java.net.URL(wsdl));

for (int i = 0; i < params.length; i++)
{
call.addParameter("arg" + i, org.apache.axis.encoding.XMLType.XSD_STRING, ParameterMode.IN);
}
if (params.length > 0)
{
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);
}
System.out.println("call = " + call);
Object obj = call.invoke(params);

return obj.toString();
}
catch (Exception e)
{
e.printStackTrace();
Log.error(xx, "", type, e);
return "";
}
}

public static String invoke2(String namespace, String method, String wsdl, Object[] paramsName, Object[] params, String nsrsbh, String type)
{
try
{
Service service = new Service();
Call call = (Call) service.createCall();
call.setOperationName(new QName(namespace, method));
call.setTargetEndpointAddress(new java.net.URL(wsdl));

for (int i = 0; i < params.length; i++)
{
call.addParameter(paramsName[i].toString(), org.apache.axis.encoding.XMLType.XSD_STRING, ParameterMode.IN);
}
if (params.length > 0)
{
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);
}
Object obj = call.invoke(params);

return obj.toString();
}
catch (Exception e)
{
e.printStackTrace();
Log.error(xx, "", type, e);
return "";
}
}
展开
 我来答
  • 你的回答被采纳后将获得:
  • 系统奖励15(财富值+成长值)+难题奖励10(财富值+成长值)+提问者悬赏20(财富值+成长值)
HHPpeace888
2014-10-27 · TA获得超过565个赞
知道小有建树答主
回答量:529
采纳率:66%
帮助的人:366万
展开全部
1、invoke()一般是java反射里的方法。

1、给外界提供的都是接口
定义一个接口,然后给这个接口定义一个实现类。
2、在src目录下新建一个META-INF文件夹,在这个文件夹下新建一个xfire文件夹,在这个文件夹下再新建一个service.xml文件。
文件内容配置例子:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">

<service>
<name>CalculatorService</name><!--接口的名字-->
<serviceClass>com.hhaip.service.CalculatorService</serviceClass><!--定义的那个接口-->
<implementationClass>
com.hhaip.service.impl.CalculatorServiceImpl <!--接口的实现-->
</implementationClass>
</service>
</beans>
3、在web.xml中将服务公布出去
<!-- 将服务公布出去 -->
<servlet>
<servlet-name>XFireServlet</servlet-name>
<display-name>XFire Servlet</display-name>
<servlet-class>
org.codehaus.xfire.transport.http.XFireConfigurableServlet
</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/servlet/XFireServlet/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>

---------------------------------------------以上就是服务端信息-------------------------------------------------

---------------------------------------------以下就是客户端信息-------------------------------------------------

1、客户端使用Ant自动建站工具帮我生成好访问Web接口所需要的信息。
2、Ant自动生成好客户端代码后,只需要新建一个测试类测试。

Ant配置例子:
build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="WebService" basedir="." default="webservice">

<property file="build.properties" />

<path id="project-classpath">
<fileset dir="${lib.dir}">
<include name="**/*.jar" />
</fileset>
</path>

<target name="webservice">
<taskdef name="wsgen" classname="org.codehaus.xfire.gen.WsGenTask"
classpathref="project-classpath" />
<wsgen outputDirectory="${scr.dir}" wsdl="${wsdl.dir}" package="com.hhaip.client" overwrite="true"/>
</target>

</project>
build.properties
scr.dir=${basedir}/src
lib.dir=E:/jar/xfire-1.2.6/lib
wsdl.dir=http://localhost:8888/myxfire/services/CalculatorService?wsdl
--> wsdl.dir这个路径配置最重要。

测试类代码:
public class TestService {

public static void main(String[] args) {

CalculatorServiceClient client = new CalculatorServiceClient();
//CalculatorServiceClient是Ant生成的客户端代码

CalculatorServicePortType portType = client.getCalculatorServiceHttpPort();
//获取接口

int addResult = portType.add(1, 3);
System.out.println(addResult);
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式