javainvoke方法说明
⑴ java invoke 以及 webservice详解,求助
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);
}
⑵ java中 invoke()如何传实体进去
你问的是Method类的invoke方法吧
这个方法的定义是:invoke(Object obj,Object...args)
第一个参数为类的实例,第二个参数为相应函数中的参数
你的问题里说如何传实体进去,很简单,你定义的方法只要写了接收参数(数量无所谓),那么直接(弄成数组)传进去就是了。
以下是一个例子:
public class Test
{
public void print(String string)
{
System.out.println("print(String string)");
System.out.println(string);
}
public void print(String ... strings)
{
System.out.println("print(String ... string)");
for(String string: strings)
System.out.println(string);
}
public static void main(String[] args) throws Exception
{
Test test = new Test();
// 调用 print(String string)
Method method1 = test.getClass().getMethod("print", String.class);
method1.invoke(test, "a");
// 调用 print(String ... strings)
Method method2 = test.getClass().getMethod("print", Array.newInstance(String.class, 0).getClass());
method2.invoke(test, new String[][]{new String[]{"a", "b"}});
}
}
⑶ Java反射invoke怎么用
Java反射中invoke的用法,我给你个例子,你看看吧(每一句都有注释)
import java.lang.reflect.Method;
import java.lang.reflect.Constructor;
public class S{
public void test(){
System.out.println("test");
}
public static void main(String[] args) throws Exception {
//获取S类
Class clzz = Class.forName("S");
//获取S类默认无参构造方法
Constructor con = clzz.getDeclaredConstructor();
//创建一个S类实例对象
S s =(S)con.newInstance();
//获取S类的公有成员方法test
Method m=clzz.getDeclaredMethod("test");
//调用S类对象s中的公有成员方法test
m.invoke(s);
}
}
⑷ java getMethod方法和invoke方法(看代码)
不纠结过多的细节的话,等价。
“巧妇难为无米之炊”在这句话说明了java里大多数方法调用的必要内容:
巧妇(谁)、为炊(干很么)、米(干活的原材料,非必需)
1、a.getName()
知道“巧妇(a)”,知道“为炊(getName)”
总结:【“巧妇”做“为炊”这件事】
2、a.getClass().getMethod("getName").invoke(a.getClass().newInstance())
1)a.getClass().getMethod("getName")
“为炊(getName)”的另一个说法
2)a.getClass().newInstance()
有“为炊”没用,还得找个“巧妇”,这句就是干这个的
3)invoke
牵个线
总结:【“为炊”这件事“invoke”帮你找个“巧妇”来做】
不要纠结,既然你还困惑这两个的差异,那就说明你还没到需要了解的时候。
⑸ java反射中method类中的invoke方法是做什么的,他有什么作用
首先Method类代表一个方法,所以invoke(调用)就是调用Method类代表的方法。它可以让你实现动态调用,例如你可以动态的传人参数。下面是一个简单的例子。
publicclassMethodTest
{
publicstaticvoidmain(String[]args)
{
String[]names={"tom","tim","allen","alice"};
Class<?>clazz=Test.class;
try
{
Methodmethod=clazz.getMethod("sayHi",String.class);
for(Stringname:names)
method.invoke(clazz.newInstance(),name);
}catch(NoSuchMethodExceptione)
{
e.printStackTrace();
}catch(IllegalAccessExceptione)
{
e.printStackTrace();
}catch(IllegalArgumentExceptione)
{
e.printStackTrace();
}catch(InvocationTargetExceptione)
{
e.printStackTrace();
}catch(InstantiationExceptione)
{
e.printStackTrace();
}
}
}
classTest
{
publicvoidsayHi(Stringname)
{
System.out.println("Hi"+name);
}
}