「java远程调用修改代码」java远程过程调用

博主:adminadmin 2022-11-24 09:01:08 69

本篇文章给大家谈谈java远程调用修改代码,以及java远程过程调用对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java如何远程调用。。。。。。。。。

RMI远程调用。你查一下这个。

或是webservices

下边是一个例子,运行server,

再运行client,可以得到对象。

-------------------------------------------------------

import java.rmi.Remote;

import java.rmi.registry.LocateRegistry;

import java.util.Date;

import javax.naming.Context;

import javax.naming.InitialContext;

public class Server {

public static void main(String[] args) throws Exception {

LocateRegistry.createRegistry(2099);

System.setProperty(Context.INITIAL_CONTEXT_FACTORY,

"com.sun.jndi.rmi.registry.RegistryContextFactory");

System.setProperty(Context.PROVIDER_URL, "rmi://localhost:2099");

Context ctx = new InitialContext();

ctx.bind("systemStartTime", new RemoteDate());

ctx.close();

while (true)

Thread.sleep(1000);

}

}

class RemoteDate extends Date implements Remote {

}

--------------------

import java.util.Date;

import javax.naming.Context;

import javax.naming.InitialContext;

public class Client {

public static void main(String[] args) throws Exception {

Context ctx = new InitialContext();

Date startTime = (Date) ctx

.lookup("rmi://localhost:2099/systemStartTime");

System.out.println(startTime);

}

}

java怎么远程调用webservice接口

Java通过WSDL文件来调用webservice:

注意,以下的代码并没有经过真正的测试,只是说明这些情况,不同版本的Axis相差很大,大家最好以apache网站上的例子为准,这里仅仅用于说明其基本用法。

1,直接AXIS调用远程的web service

这种方法比较适合那些高手,他们能直接看懂XML格式的WSDL文件,我自己是看不懂的,尤其我不是专门搞这行的,即使一段时间看懂,后来也就忘记了。直接调用模式如下:

import java.util.Date;

import java.text.DateFormat;

import org.apache.axis.client.Call;

import org.apache.axis.client.Service;

import javax.xml.namespace.QName;

import java.lang.Integer;

import javax.xml.rpc.ParameterMode;

public class caClient {

public static void main(String[] args) {

try {

String endpoint = "";

//直接引用远程的wsdl文件

//以下都是套路

Service service = new Service();

Call call = (Call) service.createCall();

call.setTargetEndpointAddress(endpoint);

call.setOperationName("addUser");//WSDL里面描述的接口名称

call.addParameter("userName", org.apache.axis.encoding.XMLType.XSD_DATE,

javax.xml.rpc.ParameterMode.IN);//接口的参数

call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//设置返回类型

String temp = "测试人员";

String result = (String)call.invoke(new Object[]{temp});

//给方法传递参数,并且调用方法

System.out.println("result is "+result);

}

catch (Exception e) {

System.err.println(e.toString());

}

}

}

2,直接SOAP调用远程的webservice

这种模式我从来没有见过,也没有试过,但是网络上有人贴出来,我也转过来

import org.apache.soap.util.xml.*;

import org.apache.soap.*;

import org.apache.soap.rpc.*;

import java.io.*;

import java.net.*;

import java.util.Vector;

public class caService{

public static String getService(String user) {

URL url = null;

try {

url=new URL("");

} catch (MalformedURLException mue) {

return mue.getMessage();

}

// This is the main SOAP object

Call soapCall = new Call();

// Use SOAP encoding

soapCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);

// This is the remote object we're asking for the price

soapCall.setTargetObjectURI("urn:xmethods-caSynrochnized");

// This is the name of the method on the above object

soapCall.setMethodName("getUser");

// We need to send the ISBN number as an input parameter to the method

Vector soapParams = new Vector();

// name, type, value, encoding style

Parameter isbnParam = new Parameter("userName", String.class, user, null);

soapParams.addElement(isbnParam);

soapCall.setParams(soapParams);

try {

// Invoke the remote method on the object

Response soapResponse = soapCall.invoke(url,"");

// Check to see if there is an error, return "N/A"

if (soapResponse.generatedFault()) {

Fault fault = soapResponse.getFault();

String f = fault.getFaultString();

return f;

} else {

// read result

Parameter soapResult = soapResponse.getReturnValue ();

// get a string from the result

return soapResult.getValue().toString();

}

} catch (SOAPException se) {

return se.getMessage();

}

}

}

3,使用wsdl2java把WSDL文件转成本地类,然后像本地类一样使用,即可。

这是像我这种懒人最喜欢的方式,仍然以前面的global weather report为例。

首先 java org.apache.axis.wsdl.WSDL2Java

原本的网址是,中间个各问号,但是Linux下面它不能解析,所以去掉问号,改为点号。

那么就会出现4个文件:

GlobalWeather.java GlobalWeatherLocator.java GlobalWeatherSoap.java GlobalWeatherSoapStub.java

其中GlobalWeatherSoap.java是我们最为关心的接口文件,如果你对RMI等SOAP实现的具体细节不感兴趣,那么你只需要看接口文件即可,在使用的时候,引入这个接口即可,就好像使用本地类一样。

怎么用java代码调用远程Linux上的shell脚本

package org.shirdrn.shell;

import java.io.IOException;

import java.io.InputStream;

import java.nio.charset.Charset;

import ch.ethz.ssh2.Connection;

import ch.ethz.ssh2.Session;

/**

* 远程Shell脚本执行工具

*

* @author Administrator

*/

public class RemoteShellTool {

private Connection conn;

private String ipAddr;

private String charset = Charset.defaultCharset().toString();

private String userName;

private String password;

public RemoteShellTool(String ipAddr, String userName, String password, String charset) {

this.ipAddr = ipAddr;

this.userName = userName;

this.password = password;

if(charset != null) {

this.charset = charset;

}

}

/**

* 登录远程Linux主机

*

* @return

* @throws IOException

*/

public boolean login() throws IOException {

conn = new Connection(ipAddr);

conn.connect(); // 连接

return conn.authenticateWithPassword(userName, password); // 认证

}

/**

* 执行Shell脚本或命令

*

* @param cmds 命令行序列

* @return

*/

public String exec(String cmds) {

InputStream in = null;

String result = "";

try {

if (this.login()) {

Session session = conn.openSession(); // 打开一个会话

session.execCommand(cmds);

in = session.getStdout();

result = this.processStdout(in, this.charset);

conn.close();

}

} catch (IOException e1) {

e1.printStackTrace();

}

return result;

}

/**

* 解析流获取字符串信息

*

* @param in 输入流对象

* @param charset 字符集

* @return

*/

public String processStdout(InputStream in, String charset) {

byte[] buf = new byte[1024];

StringBuffer sb = new StringBuffer();

try {

while (in.read(buf) != -1) {

sb.append(new String(buf, charset));

}

} catch (IOException e) {

e.printStackTrace();

}

return sb.toString();

}

}

java程序无法远程调用sap函数

java程序远程调用sap函数代码:

JCoDestination destination = rfcSource.getDestination();

JCoFunction function = destination.getRepository().getFunction(funcName);

JCoParameterList paramStrlist = function.getImportParameterList();

JCoParameterList paramTableList = function.getTableParameterList();

ListString paramList = getParamList();

for (String param : paramList) {

int index = param.indexOf(":{");

if(index = 0){

String type = param.substring(0,index);

if(type.toLowerCase().equals("strings")){

String typeValues = param.substring(index + 2,param.length() - 1);

String[] paramArray = typeValues.split("[|]");

for (String pa : paramArray) {

paramStrlist.setValue(pa, paramMap.get(pa));

}

}else if(type.toLowerCase().equals("tables")){

String typeValues = param.substring(index + 2,param.length() - 1);

String[] paramArray = typeValues.split("[;]");

for (String pa : paramArray) {

int tabIndex = pa.indexOf(":");

if(tabIndex = 0){

String tableName = pa.substring(0,tabIndex);

String tableFields = pa.substring(tabIndex +1); //

String[] tfArray = tableFields.split("[|]");

paramTableList.getTable(tableName).appendRow();

for (String tf: tfArray) {

paramTableList.getTable(tableName).setValue(tf, paramMap.get(tableName+ "." + tf));

}

}

paramTableList.set

}

}

}

}

function.execute(destination);

String queryString = getQryString();

String rfcName = queryString.substring(0, queryString.indexOf(","));

String rfcParam = queryString.substring(rfcName.length() + 1);

final String[] returnType = { "TABLES", "STRUCTURES", "STRINGS" }; //SAP输出类型格式

如何使用 Idea 远程调试 Java 代码

项目的部署方式有在本地搭建服务器进行启动或是debug,或是将项目在远程服务器上面部署。一般如果在本地搭建服务器的时候,可以直接选择启动或是直接debug,但是如果项目部署在远程的服务器上面的时候, 我们该如何进行调试呢?而一些大公司的项目是不需要在本地搭建应用服务器的,为了环境统一,应用服务器都是在远程服务器上面,这时我们就需要用远程debug,通过远程服务器的ip地址和远程开启的debug端口进行调试:

1.首先把远程服务器上面需要调试的代码放在IDE里面

2.在菜单栏选择run -edit Configuration,点击+号,选择remote,然后在配置项里面输入远程需要调试机器的IP地址和所对应的端口号,最后在最上面输入该次一远程调试的项目名字,方便自己区分不同的项目

3.将配置项中的-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5080添加到JAVA_OPTS的属性中,重启远程tomcat服务器

3.再次选择菜单条run按钮,找到debug+“自己设置的项目名字”,点击然后就可以进行远程debug调试

4.在本地项目中设置断点,然后访问远程机器上面的IP和端口,然后就可以在本地debug调试了

救,air调用本地java程序和远程java怎么实现

JNI是JavaNativeInterface的缩写,中文为JAVA本地调用。从Java1.1开始,JavaNativeInterface(JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。

使用java与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况下这样做是可以接受的,甚至是必须的,比如,使用一些旧的库,与硬件、操作系统进行交互,或者为了提高程序的性能。JNI标准至少保证本地代码能工作在任何Java虚拟机实现下。

------------------------------------------------------------------

编写带有native声明的方法的java类

·使用javac命令编译所编写的java类

·使用javah?jnijava类名生成扩展名为h的头文件

·使用C/C++实现本地方法

·将C/C++编写的文件生成动态连接库

·ok

1)编写java程序:这里以HelloWorld为例。

代码1:

classHelloWorld{

publicnativevoiddisplayHelloWorld();

static{

System.loadLibrary("hello");

}

publicstaticvoidmain(String[]args){

newHelloWorld().displayHelloWorld();

}

}

声明native方法:如果你想将一个方法做为一个本地方法的话,那么你就必须声明改方法为native的,并且不能实现。其中方法的参数和返回值在后面讲述。Load动态库:System.loadLibrary("hello");加载动态库(我们可以这样理解:我们的方法displayHelloWorld()没有实现,但是我们在下面就直接使用了,所以必须在使用之前对它进行初始化)这里一般是以static块进行加载的。同时需要注意的是System.loadLibrary();的参数“hello”是动态库的名字。

2)编译

没有什么好说的了javacHelloWorld.java

3)生成扩展名为h的头文件javah?

jniHelloWorld头文件的内容:/*DONOTEDITTHISFILE-itismachinegenerated*/

1.include

/*HeaderforclassHelloWorld*/

1.ifndef_Included_HelloWorld

2.define_Included_HelloWorld

3.ifdef__cplusplus

extern"C"{

1.endif

/*

*Class:HelloWorld

*Method:displayHelloWorld

*Signature:()V

*/

JNIEXPORTvoidJNICALLJava_HelloWorld_displayHelloWorld(JNIEnv*,jobject);

1.ifdef__cplusplus

}

1.endif

2.endif

(这里我们可以这样理解:这个h文件相当于我们在java里面的接口,这里声明了一个Java_HelloWorld_displayHelloWorld(JNIEnv*,jobject);方法,然后在我们的本地方法里面实现这个方法,也就是说我们在编写C/C++程序的时候所使用的方法名必须和这里的一致)。

4)编写本地方法实现和由javah命令生成的头文件里面声明的方法名相同的方法。

代码2:

1#include"jni.h"

2#include"HelloWorld.h"

3//#includeotherheaders

4JNIEXPORTvoidJNICALLJava_HelloWorld_displayHelloWorld(JNIEnv*env,jobjectobj)

{

printf("Helloworld!\n");

return;

}

注意代码2中的第1行,需要将jni.h(该文件可以在%JAVA_HOME%/include文件夹下面找到)文件引入,因为在程序中的JNIEnv、jobject等类型都是在该头文件中定义的;另外在第2行需要将HelloWorld.h头文件引入(我是这么理解的:相当于我们在编写java程序的时候,实现一个接口的话需要声明才可以,这里就是将HelloWorld.h头文件里面声明的方法加以实现。当然不一定是这样)。然后保存为HelloWorldImpl.c就ok了。

5)生成动态库

这里以在Windows中为例,需要生成dll文件。在保存HelloWorldImpl.c文件夹下面,使用VC的编译器cl成。cl-I%java_home%\include-I%java_home%\include\win32-LDHelloWorldImp.c-Fehello.dll注意:生成的dll文件名在选项-Fe后面配置,这里是hello,因为在HelloWorld.java文件中我们loadLibary的时候使用的名字是hello。当然这里修改之后那里也需要修改。另外需要将-I%java_home%\include-I%java_home%\include\win32参数加上,因为在第四步里面编写本地方法的时候引入了jni.h文件。

6)运行程序javaHelloWorld就ok.

---------------------------------------------------------------

下面是一个简单的例子实现打印一句话的功能,但是用的c的printf最终实现。一般提供给java的jni接口包括一个so文件(封装了c函数的实现)和一个java文件(需要调用path的类)。

1.JNI的目的是使java方法中能够调用c实现的一些函数,比如以下的java类,就需要调用一个本地函数testjni(一般声明为privatenative类型),首先需要创建文件weiqiong.java,内容如下:

classweiqiong{static{System.loadLibrary("testjni");//载入静态库,test函数在其中实现}privatenativevoidtestjni();//声明本地调用publicvoidtest(){testjni();}publicstaticvoidmain(Stringargs[]){weiqionghaha=newweiqiong();haha.test();}}

2.然后执行javacweiqiong.java,如果没有报错,会生成一个weiqiong.class。

3.然后设置classpath为你当前的工作目录,如直接输入命令行:setclasspath=weiqiong.class所在的完整目录(如c:\test)再执行javahweiqiong,会生成一个文件weiqiong.h文件,其中有一个函数的声明如下:

JNIEXPORTvoidJNICALLJava_weiqiong_testjni(JNIEnv*,jobject);

4.创建文件testjni.c将上面那个函数实现,内容如下:

1.include

2.include

JNIEXPORTvoidJNICALLJava_weiqiong_testjni(JNIEnv*env,jobjectobj){printf("haha---------gointoc!!!\n");}

5.为了生成.so文件,创建makefile文件如下:

libtestjni.so:testjni.omakefilegcc-Wall-rdynamic-shared-olibtestjni.sotestjni.otestjni.o:testjni.cweiqiong.hgcc-Wall-ctestjni.c-I./-I/usr/java/j2sdk1.4.0/include-I/usr/java/j2sdk1.4.0/include/linuxcl:rm-rf*.o*.so注意:gcc前面是tab空,j2sdk的目录根据自己装的j2sdk的具体版本来写,生成的so文件的名字必须是loadLibrary的参数名前加“lib”。

6.exportLD_LIBRARY_PATH=.,由此设置library路径为当前目录,这样java文件才能找到so文件。一般的做法是将so文件copy到本机的LD_LIBRARY_PATH目录下。

7.执行javaweiqiong,打印出结果:“haha---------gointoc!!!”

java远程调用修改代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java远程过程调用、java远程调用修改代码的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-24,除非注明,否则均为首码项目网原创文章,转载请注明出处。