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 "";
}
} 展开
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(财富值+成长值)
1个回答
展开全部
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);
}
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);
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询