请教怎样调用通过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 丢进去 就好了。
你在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
#6
我也是用ANIX的 你把你的东西 依次填入我给你的代码中去试
你的代码我觉得也是网上找来的 自己没研究过就拿来用的是吧
我这个DEMO测试是成功的
#7
我刚开发完一个 webservice接口方面的调用,根本就没用到 wsdl 虽说不正统,但是效果蛮好。
#8
使用wsCaller-1.0.rar,源码发你的邮箱了
#9
倒分贴?
#10
问题解决了,把解决方法贴出来和大家分享下。
解决的方法还是调用根据wsdl文件生成的客户端代码,一下是参考代码:
下面根据8楼提供的wsCaller-1.0的原来写的调用代码(在myeclipse中运行没有问题,但是我们项目的开发工具是普元-一个基于eclipse的开发工具,放在普元里面没有调通,原因:jaxrpc.jar包中的javax\xml\namespace\QName这个类和rt.jar中的QName有冲突,在myeclipse中是先加载的rt.jar中的类,但是在普元里面却是先加载的jaxrpc.jar中的类,导致调用出错;在网上找了怎么设置类的加载顺序是在项目的classpath文件中把优先加载的jar包放到前面,但是我这样做了普元还是没有优先加载rt.jar中的类):
首先,谢谢朱超兄的支持,朱兄不要误会,8楼是我的一个朋友,看到我遇到问题所以就直接把代码发我邮箱了
解决的方法还是调用根据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
AsigServiceServiceSoapBindingStub asigService = (AsigServiceServiceSoapBindingStub)service.getAsigServicePort(new java.net.URL(wsdlStr));
直接这样用就好了。有时候需要处理header头,就需要****Stub这个类来处理的。谢谢分享的代码引导!
#1
endpoint就是那个 http://xxxx.xxx.xxx?wsdl
你在call那设置好 target
我在家 代码不在身边 没法给你了。 你有call对象 你点 下 会有一个 属性 这个属性的名字 有
target 的。。好好看看 然后把 你这个 endpoint 丢进去 就好了。
你在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
#6
我也是用ANIX的 你把你的东西 依次填入我给你的代码中去试
你的代码我觉得也是网上找来的 自己没研究过就拿来用的是吧
我这个DEMO测试是成功的
#7
我刚开发完一个 webservice接口方面的调用,根本就没用到 wsdl 虽说不正统,但是效果蛮好。
#8
使用wsCaller-1.0.rar,源码发你的邮箱了
#9
倒分贴?
#10
问题解决了,把解决方法贴出来和大家分享下。
解决的方法还是调用根据wsdl文件生成的客户端代码,一下是参考代码:
下面根据8楼提供的wsCaller-1.0的原来写的调用代码(在myeclipse中运行没有问题,但是我们项目的开发工具是普元-一个基于eclipse的开发工具,放在普元里面没有调通,原因:jaxrpc.jar包中的javax\xml\namespace\QName这个类和rt.jar中的QName有冲突,在myeclipse中是先加载的rt.jar中的类,但是在普元里面却是先加载的jaxrpc.jar中的类,导致调用出错;在网上找了怎么设置类的加载顺序是在项目的classpath文件中把优先加载的jar包放到前面,但是我这样做了普元还是没有优先加载rt.jar中的类):
首先,谢谢朱超兄的支持,朱兄不要误会,8楼是我的一个朋友,看到我遇到问题所以就直接把代码发我邮箱了
解决的方法还是调用根据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
AsigServiceServiceSoapBindingStub asigService = (AsigServiceServiceSoapBindingStub)service.getAsigServicePort(new java.net.URL(wsdlStr));
直接这样用就好了。有时候需要处理header头,就需要****Stub这个类来处理的。谢谢分享的代码引导!