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);
}
}