请教怎样调用通过wsdl生成的客户端(接口协议RPC)

时间:2022-12-11 12:03:39

       请教怎样调用通过wsdl生成的客户端(接口协议RPC)

       AsigService.java
       AsigServiceService.java
       AsigServiceServiceLocator.java
       AsigServiceServiceSoapBindingStub.java

       AsigServiceServiceSoapBindingStub stub = new AsigServiceServiceSoapBindingStub();
       SimpleDateFormat dateFormat =new SimpleDateFormat("yyyy-MM-dd");
       String info = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><root>test</root>";
       System.out.println(stub.executeXML(info));


结果报如下错误:


AxisFault
 faultCode: {http://xml.apache.org/axis/}Server.NoEndpoint
 faultSubcode: 
 faultString: No endpoint
 faultActor: 
 faultNode: 
 faultDetail: 
{http://xml.apache.org/axis/}exceptionName:org.apache.axis.NoEndPointException
{http://xml.apache.org/axis/}stackTrace:No endpoint
at test.AsigServiceServiceSoapBindingStub.executeXML(AsigServiceServiceSoapBindingStub.java:458)
at test.Test.main(Test.java:318)

{http://xml.apache.org/axis/}hostname:WWW-5F02D06A341

No endpoint
at test.AsigServiceServiceSoapBindingStub.executeXML(AsigServiceServiceSoapBindingStub.java:458)
at test.Test.main(Test.java:318)




请问下怎么设置endpoint,谢谢!


问题解决马上给分

12 个解决方案

#1


endpoint就是那个 http://xxxx.xxx.xxx?wsdl

你在call那设置好 target

我在家 代码不在身边 没法给你了。 你有call对象 你点 下 会有一个 属性 这个属性的名字 有

target 的。。好好看看 然后把 你这个 endpoint 丢进去 就好了。

#2


我们项目的接口都是用axis实现的,用如下代码调用是可以的,但是现在我们调被人的接口,他们的接口是RPC协议的,用如下代码调不行了


Service service = new Service();

Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new URL(webServiceurl));
Object[] sss = new Object[] { "jsywtocpmis", "jsywtocpmis","YWPA_providerinfo", "", info1 };

call.setOperationName(new QName(null, "IfService"));
String result = (String) call.invoke(sss);
System.out.println(result);


#3



import javax.xml.namespace.QName;
import javax.xml.rpc.Call;
import org.apache.axis.client.Service;
public class Test {
public static void main(String[] args)throws Exception {
Service service = new Service();//创建一个Service对象
String endPoint = "http://127.0.0.1/sso/services/Service.jws?wsdl";//你的WebService的URL
QName qName = new QName(endPoint);//创建一个QName对象把你的endPoint丢进去
Call call = service.createCall(qName,"sayHello");//创建一个Call对象把QName实力丢进去,把WebSevice提供的方法的名字丢进去,我这里是sayHello
call.setTargetEndpointAddress(endPoint); //在Call实例里你要指定endPoint,你就少这步。
System.err.println(call.invoke(new Object[]{"朱超123"}));//然后你调方法,我的sayHello里就一个参数,你要是多个可以多添加到Object[]中去。
}
//拿去玩吧

#4


看到200分就进来了。

#5


请教怎样调用通过wsdl生成的客户端(接口协议RPC)

#6


引用 2 楼 lgq_0714 的回复:
我们项目的接口都是用axis实现的,用如下代码调用是可以的,但是现在我们调被人的接口,他们的接口是RPC协议的,用如下代码调不行了

Java code

Service service = new Service();

Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new URL(webSe……


我也是用ANIX的 你把你的东西 依次填入我给你的代码中去试

你的代码我觉得也是网上找来的 自己没研究过就拿来用的是吧

我这个DEMO测试是成功的

#7


我刚开发完一个 webservice接口方面的调用,根本就没用到 wsdl  虽说不正统,但是效果蛮好。

#8


使用wsCaller-1.0.rar,源码发你的邮箱了

#9


倒分贴?

#10


问题解决了,把解决方法贴出来和大家分享下。
解决的方法还是调用根据wsdl文件生成的客户端代码,一下是参考代码:

String text = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<root>" +
"<functionCode>MON_EQUIMENT_COMMENT</functionCode>" +
"<paramDoc>" +
"<taskId>1100</taskId>" +
"<commentFlag>F</commentFlag>" +
"<commentTime>2012-03-26</commentTime>" +
"</paramDoc>" +
"</root>";
String wsdlStr = "http://132.228.91.43:8001/ida/services/AsigService";
AsigServiceService service = new AsigServiceServiceLocator();

AsigService asigService = service.getAsigServicePort(new java.net.URL(wsdlStr));

((AsigServiceServiceSoapBindingStub)asigService).setTimeout(100000);

System.out.println(asigService.executeXML(text));


下面根据8楼提供的wsCaller-1.0的原来写的调用代码(在myeclipse中运行没有问题,但是我们项目的开发工具是普元-一个基于eclipse的开发工具,放在普元里面没有调通,原因:jaxrpc.jar包中的javax\xml\namespace\QName这个类和rt.jar中的QName有冲突,在myeclipse中是先加载的rt.jar中的类,但是在普元里面却是先加载的jaxrpc.jar中的类,导致调用出错;在网上找了怎么设置类的加载顺序是在项目的classpath文件中把优先加载的jar包放到前面,但是我这样做了普元还是没有优先加载rt.jar中的类):

DynamicInvoker dynamicInvoker = new DynamicInvoker("http://132.228.91.43:8001/ida/services/AsigService?wsdl");
Vector inputs = new Vector();
inputs.add("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root><functionCode>MON_EQUIMENT_COMMENT</functionCode><paramDoc><taskId>1100</taskId><commentFlag>F</commentFlag><commentTime></commentTime></paramDoc></root>");
System.out.println(dynamicInvoker.invoke("AsigServiceService", "AsigServicePort", "executeXML", inputs));




首先,谢谢朱超兄的支持,朱兄不要误会,8楼是我的一个朋友,看到我遇到问题所以就直接把代码发我邮箱了

#11


  那调用的这个服务,没开,也就是说你调用的这个IP地址,服务器没开,跟我报的错一摸一样,

#12


引用 10 楼 lgq_0714 的回复:
问题解决了,把解决方法贴出来和大家分享下。
解决的方法还是调用根据wsdl文件生成的客户端代码,一下是参考代码:

String text = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<root>" +
"<functionCode>MON_EQUIMENT_COMMENT</functionCode>" +
"<paramDoc>" +
"<taskId>1100</taskId>" +
"<commentFlag>F</commentFlag>" +
"<commentTime>2012-03-26</commentTime>" +
"</paramDoc>" +
"</root>";
String wsdlStr = "http://132.228.91.43:8001/ida/services/AsigService";
AsigServiceService service = new AsigServiceServiceLocator();

AsigService asigService = service.getAsigServicePort(new java.net.URL(wsdlStr));

((AsigServiceServiceSoapBindingStub)asigService).setTimeout(100000);

System.out.println(asigService.executeXML(text));


下面根据8楼提供的wsCaller-1.0的原来写的调用代码(在myeclipse中运行没有问题,但是我们项目的开发工具是普元-一个基于eclipse的开发工具,放在普元里面没有调通,原因:jaxrpc.jar包中的javax\xml\namespace\QName这个类和rt.jar中的QName有冲突,在myeclipse中是先加载的rt.jar中的类,但是在普元里面却是先加载的jaxrpc.jar中的类,导致调用出错;在网上找了怎么设置类的加载顺序是在项目的classpath文件中把优先加载的jar包放到前面,但是我这样做了普元还是没有优先加载rt.jar中的类):

DynamicInvoker dynamicInvoker = new DynamicInvoker("http://132.228.91.43:8001/ida/services/AsigService?wsdl");
Vector inputs = new Vector();
inputs.add("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root><functionCode>MON_EQUIMENT_COMMENT</functionCode><paramDoc><taskId>1100</taskId><commentFlag>F</commentFlag><commentTime></commentTime></paramDoc></root>");
System.out.println(dynamicInvoker.invoke("AsigServiceService", "AsigServicePort", "executeXML", inputs));




首先,谢谢朱超兄的支持,朱兄不要误会,8楼是我的一个朋友,看到我遇到问题所以就直接把代码发我邮箱了


AsigServiceServiceSoapBindingStub asigService = (AsigServiceServiceSoapBindingStub)service.getAsigServicePort(new java.net.URL(wsdlStr));
直接这样用就好了。有时候需要处理header头,就需要****Stub这个类来处理的。谢谢分享的代码引导!

#1


endpoint就是那个 http://xxxx.xxx.xxx?wsdl

你在call那设置好 target

我在家 代码不在身边 没法给你了。 你有call对象 你点 下 会有一个 属性 这个属性的名字 有

target 的。。好好看看 然后把 你这个 endpoint 丢进去 就好了。

#2


我们项目的接口都是用axis实现的,用如下代码调用是可以的,但是现在我们调被人的接口,他们的接口是RPC协议的,用如下代码调不行了


Service service = new Service();

Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new URL(webServiceurl));
Object[] sss = new Object[] { "jsywtocpmis", "jsywtocpmis","YWPA_providerinfo", "", info1 };

call.setOperationName(new QName(null, "IfService"));
String result = (String) call.invoke(sss);
System.out.println(result);


#3



import javax.xml.namespace.QName;
import javax.xml.rpc.Call;
import org.apache.axis.client.Service;
public class Test {
public static void main(String[] args)throws Exception {
Service service = new Service();//创建一个Service对象
String endPoint = "http://127.0.0.1/sso/services/Service.jws?wsdl";//你的WebService的URL
QName qName = new QName(endPoint);//创建一个QName对象把你的endPoint丢进去
Call call = service.createCall(qName,"sayHello");//创建一个Call对象把QName实力丢进去,把WebSevice提供的方法的名字丢进去,我这里是sayHello
call.setTargetEndpointAddress(endPoint); //在Call实例里你要指定endPoint,你就少这步。
System.err.println(call.invoke(new Object[]{"朱超123"}));//然后你调方法,我的sayHello里就一个参数,你要是多个可以多添加到Object[]中去。
}
//拿去玩吧

#4


看到200分就进来了。

#5


请教怎样调用通过wsdl生成的客户端(接口协议RPC)

#6


引用 2 楼 lgq_0714 的回复:
我们项目的接口都是用axis实现的,用如下代码调用是可以的,但是现在我们调被人的接口,他们的接口是RPC协议的,用如下代码调不行了

Java code

Service service = new Service();

Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new URL(webSe……


我也是用ANIX的 你把你的东西 依次填入我给你的代码中去试

你的代码我觉得也是网上找来的 自己没研究过就拿来用的是吧

我这个DEMO测试是成功的

#7


我刚开发完一个 webservice接口方面的调用,根本就没用到 wsdl  虽说不正统,但是效果蛮好。

#8


使用wsCaller-1.0.rar,源码发你的邮箱了

#9


倒分贴?

#10


问题解决了,把解决方法贴出来和大家分享下。
解决的方法还是调用根据wsdl文件生成的客户端代码,一下是参考代码:

String text = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<root>" +
"<functionCode>MON_EQUIMENT_COMMENT</functionCode>" +
"<paramDoc>" +
"<taskId>1100</taskId>" +
"<commentFlag>F</commentFlag>" +
"<commentTime>2012-03-26</commentTime>" +
"</paramDoc>" +
"</root>";
String wsdlStr = "http://132.228.91.43:8001/ida/services/AsigService";
AsigServiceService service = new AsigServiceServiceLocator();

AsigService asigService = service.getAsigServicePort(new java.net.URL(wsdlStr));

((AsigServiceServiceSoapBindingStub)asigService).setTimeout(100000);

System.out.println(asigService.executeXML(text));


下面根据8楼提供的wsCaller-1.0的原来写的调用代码(在myeclipse中运行没有问题,但是我们项目的开发工具是普元-一个基于eclipse的开发工具,放在普元里面没有调通,原因:jaxrpc.jar包中的javax\xml\namespace\QName这个类和rt.jar中的QName有冲突,在myeclipse中是先加载的rt.jar中的类,但是在普元里面却是先加载的jaxrpc.jar中的类,导致调用出错;在网上找了怎么设置类的加载顺序是在项目的classpath文件中把优先加载的jar包放到前面,但是我这样做了普元还是没有优先加载rt.jar中的类):

DynamicInvoker dynamicInvoker = new DynamicInvoker("http://132.228.91.43:8001/ida/services/AsigService?wsdl");
Vector inputs = new Vector();
inputs.add("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root><functionCode>MON_EQUIMENT_COMMENT</functionCode><paramDoc><taskId>1100</taskId><commentFlag>F</commentFlag><commentTime></commentTime></paramDoc></root>");
System.out.println(dynamicInvoker.invoke("AsigServiceService", "AsigServicePort", "executeXML", inputs));




首先,谢谢朱超兄的支持,朱兄不要误会,8楼是我的一个朋友,看到我遇到问题所以就直接把代码发我邮箱了

#11


  那调用的这个服务,没开,也就是说你调用的这个IP地址,服务器没开,跟我报的错一摸一样,

#12


引用 10 楼 lgq_0714 的回复:
问题解决了,把解决方法贴出来和大家分享下。
解决的方法还是调用根据wsdl文件生成的客户端代码,一下是参考代码:

String text = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<root>" +
"<functionCode>MON_EQUIMENT_COMMENT</functionCode>" +
"<paramDoc>" +
"<taskId>1100</taskId>" +
"<commentFlag>F</commentFlag>" +
"<commentTime>2012-03-26</commentTime>" +
"</paramDoc>" +
"</root>";
String wsdlStr = "http://132.228.91.43:8001/ida/services/AsigService";
AsigServiceService service = new AsigServiceServiceLocator();

AsigService asigService = service.getAsigServicePort(new java.net.URL(wsdlStr));

((AsigServiceServiceSoapBindingStub)asigService).setTimeout(100000);

System.out.println(asigService.executeXML(text));


下面根据8楼提供的wsCaller-1.0的原来写的调用代码(在myeclipse中运行没有问题,但是我们项目的开发工具是普元-一个基于eclipse的开发工具,放在普元里面没有调通,原因:jaxrpc.jar包中的javax\xml\namespace\QName这个类和rt.jar中的QName有冲突,在myeclipse中是先加载的rt.jar中的类,但是在普元里面却是先加载的jaxrpc.jar中的类,导致调用出错;在网上找了怎么设置类的加载顺序是在项目的classpath文件中把优先加载的jar包放到前面,但是我这样做了普元还是没有优先加载rt.jar中的类):

DynamicInvoker dynamicInvoker = new DynamicInvoker("http://132.228.91.43:8001/ida/services/AsigService?wsdl");
Vector inputs = new Vector();
inputs.add("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root><functionCode>MON_EQUIMENT_COMMENT</functionCode><paramDoc><taskId>1100</taskId><commentFlag>F</commentFlag><commentTime></commentTime></paramDoc></root>");
System.out.println(dynamicInvoker.invoke("AsigServiceService", "AsigServicePort", "executeXML", inputs));




首先,谢谢朱超兄的支持,朱兄不要误会,8楼是我的一个朋友,看到我遇到问题所以就直接把代码发我邮箱了


AsigServiceServiceSoapBindingStub asigService = (AsigServiceServiceSoapBindingStub)service.getAsigServicePort(new java.net.URL(wsdlStr));
直接这样用就好了。有时候需要处理header头,就需要****Stub这个类来处理的。谢谢分享的代码引导!