首先 java 中 public class TestHello {
static {
System.loadLibrary("TestHellos")
}
public static native void hello(String msg)
public native void GetSysID()
public native String GetKeyCode(String sysId)
public native boolean TestKeyCode(String sysId, String keyCode)
public static void main(String[] args) {
// hello("Hello,Kimm!")
TestHello t= new TestHello()
t.GetSysID()
}
}
用javac TestHello.java, java TestHello,javah -classpath . -verbose TestHello 。将生产的头文件用到C++ 中的 HeardFileds 中。然后在 sources files 中实现 heardfieds 的方法。实现的方法,其实就是你要调用C++的方法、
Java调用WebService可以直接使用Apache提供的axis.jar自己编写代码,或者利用Eclipse自动生成WebService Client代码,利用其中的Proxy类进行调用。理论上是一样的,只不过用Eclipse自动生成代码省事些。
1、编写代码方式:
package com.yudun.testimport java.rmi.RemoteException
import org.apache.axis.client.Call
import org.apache.axis.client.Service
import org.apache.axis.message.PrefixedQName
import org.apache.axis.message.SOAPHeaderElement
import com.cezanne.golden.user.Exception
import com.cezanne.golden.user.UserManagerServiceProxy
import javax.xml.namespace.QName
import java.net.MalformedURLException
import javax.xml.rpc.ServiceException
import javax.xml.soap.Name
import javax.xml.soap.SOAPException
public class testWebService {
public static String getResult() throws ServiceException, MalformedURLException, RemoteException, SOAPException
{
//标识Web Service的具体路径
String endpoint = "WebService服务地址"
// 创建 Service实例
Service service = new Service()
// 通过Service实例创建Call的实例
Call call = (Call) service.createCall()
//将Web Service的服务路径加入到call实例之中.
call.setTargetEndpointAddress( new java.net.URL(endpoint) )//为Call设置服务的位置
// 由于需要认证,故需要设置调用的SOAP头信息。
Name headerName = new PrefixedQName( new QName("发布的wsdl里的targetNamespace里的url", "string_itemName") )
org.apache.axis.message.SOAPHeaderElement header = new SOAPHeaderElement(headerName)
header.addTextNode( "blablabla" )
call.addHeader(header)
// SOAPHeaderElement soapHeaderElement = new SOAPHeaderElement("发布的wsdl里的targetNamespace里的url", "SoapHeader")
// soapHeaderElement.setNamespaceURI("发布的wsdl里的targetNamespace里的url")
// try
// {
// soapHeaderElement.addChildElement("string_itemName").setValue("blablabla")
// }
// catch (SOAPException e)
// {
// e.printStackTrace()
// }
// call.addHeader(soapHeaderElement)
//调用Web Service的方法
org.apache.axis.description.OperationDesc oper
org.apache.axis.description.ParameterDesc param
oper = new org.apache.axis.description.OperationDesc()
oper.setName("opName")
param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "arg0"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName(", "string"), java.lang.String.class, false, false)
param.setOmittable(true)
oper.addParameter(param)
param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "arg1"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName(", "string"), java.lang.String.class, false, false)
param.setOmittable(true)
oper.addParameter(param)
param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "arg2"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName(", "string"), java.lang.String.class, false, false)
param.setOmittable(true)
oper.addParameter(param)
oper.setReturnType(new javax.xml.namespace.QName(", "string"))
oper.setReturnClass(java.lang.String.class)
oper.setReturnQName(new javax.xml.namespace.QName("", "return"))
oper.setStyle(org.apache.axis.constants.Style.WRAPPED)
oper.setUse(org.apache.axis.constants.Use.LITERAL)
oper.addFault(new org.apache.axis.description.FaultDesc(
new javax.xml.namespace.QName("发布的wsdl里的targetNamespace里的url", "Exception"),
"Exception",
new javax.xml.namespace.QName("发布的wsdl里的targetNamespace里的url", "Exception"),
true
))
call.setOperation( oper )
call.setOperationName(new javax.xml.namespace.QName("发布的wsdl里的targetNamespace里的url", "opName"))
//调用Web Service,传入参数
String res = ( String ) call.invoke( new Object[]("arg0","arg1"))
System.out.println("===============")
return res
}
/**
* @param args
*/
public static void main(String[] args) {
try {
System.out.println(getResult())
} catch (MalformedURLException e) {
e.printStackTrace()
} catch (RemoteException e) {
e.printStackTrace()
} catch (ServiceException e) {
e.printStackTrace()
} catch (SOAPException e) {
e.printStackTrace()
}
}
}
2、利用Eclipse自动生成WebService client代码就容易多了:
首先,new project,选择other,在输入框中输入Web Service Client,选中搜索后的结果,点击Next,在Service definition中输入 WebService的发布地址,点击Finish
这样,WebService Client代码已经生成好了。
接下来写一个Test类,在main函数中输入如下代码:
String endpoint = "服务器的WebService的地址"
YourWebServiceNameProxy umsp = new YourWebServiceNameProxy (endpoint)
try {
String resultStr = umsp.opMethod("arg0","arg1")
System.out.println(resultStr)
} catch (Exception e) {
System.out.println("异常")
e.printStackTrace()
} catch (RemoteException e) {
System.out.println("RemoteException异常")
e.printStackTrace()
}