关于webservice用soap调用怎么写

软件开发者 2014-03-26 10:30:15
现在有需求做一个用户对接,我是第三方软件,对方提供了一个wsdl地址,让我写个soap接收数据。这个怎么写,从来没写过这类型的。来个大神告诉下怎么写。很急!!!!
...全文
57525 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
shengerpingfan 2014-03-27
  • 打赏
  • 举报
回复
看看xfire 和axis
wenjie4892543 2014-03-27
  • 打赏
  • 举报
回复
wsdl 就是 提供 了 一个 web service接口,,具体业务怎么实现,就看这个wsdl里面的数据了,。。他可以把用户更改的数据传过来了吧 ,,如果 说做同步的话
软件开发者 2014-03-26
  • 打赏
  • 举报
回复
有没有人啊。实在想不明白了。。。。。。。
软件开发者 2014-03-26
  • 打赏
  • 举报
回复
头疼死了。昨天就琢磨了一天。
软件开发者 2014-03-26
  • 打赏
  • 举报
回复
引用 2 楼 fan578 的回复:
应该是叫你用soapUi之类的软件,调用下他提供的地址,看下获取的数据是否正确吧
应该不是,他说当他们的用户信息发生变化时,我编写的soap就会接收到消息。
  • 打赏
  • 举报
回复
应该是叫你用soapUi之类的软件,调用下他提供的地址,看下获取的数据是否正确吧
软件开发者 2014-03-26
  • 打赏
  • 举报
回复
软件开发者 2014-03-26
  • 打赏
  • 举报
回复
引用 15 楼 fangmingshijie 的回复:
提供给你wsdl,是要你访问的,访问方式很多,能成功访问就行。
访问了,只有一堆属性。这个是要做用户同步的时候用到的。我门是第三方软件。要同步他们的用户。
  • 打赏
  • 举报
回复
提供给你wsdl,是要你访问的,访问方式很多,能成功访问就行。
软件开发者 2014-03-26
  • 打赏
  • 举报
回复
引用 12 楼 zcwgogo 的回复:
现在你可以直接用main函数 new 一个UpdateUserCommon跑起来了。这样就OK了,以后在你需要调用它webservice的时候就 new这边 然后调用里面的方法就行了。其实你可以用我上面那种代码比较清爽
这个wsdl没有方法。只有属性。是不是要我按照这个格式给发布一个。
zcwgogo 2014-03-26
  • 打赏
  • 举报
回复
现在你可以直接用main函数 new 一个UpdateUserCommon跑起来了。这样就OK了,以后在你需要调用它webservice的时候就 new这边 然后调用里面的方法就行了。其实你可以用我上面那种代码比较清爽
软件开发者 2014-03-26
  • 打赏
  • 举报
回复

地址打开是这样,我用myEclipse生成就成下面这样了。
zcwgogo 2014-03-26
  • 打赏
  • 举报
回复
SOAP就是webservice的传说协议。。
zcwgogo 2014-03-26
  • 打赏
  • 举报
回复
。。。。 他给你的地址打开之后是不是这个。

<?xml version="1.0" encoding="UTF-8" ?>
<definitions name="FooSample" targetNamespace="http://tempuri.org/wsdl/"
	xmlns:wsdlns="http://tempuri.org/wsdl/" xmlns:typens="http://tempuri.org/xsd"
	xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
	xmlns:stk="http://schemas.microsoft.com/soap-toolkit/wsdl-extension"
	xmlns="http://schemas.xmlsoap.org/wsdl/">
	<types>
		<schema targetNamespace="http://tempuri.org/xsd" xmlns="http://www.w3.org/2001/XMLSchema"
			xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
			xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" elementFormDefault="qualified">
		</schema>
	</types>
	<message name="Simple.foo">
		<part name="arg" type="xsd:int" />
	</message>
	<message name="Simple.fooResponse">
		<part name="result" type="xsd:int" />
	</message>
	<portType name="SimplePortType">
		<operation name="foo" parameterOrder="arg">
			<input message="wsdlns:Simple.foo" />
			<output message="wsdlns:Simple.fooResponse" />
		</operation>
	</portType>
	<binding name="SimpleBinding" type="wsdlns:SimplePortType">
		<stk:binding preferredEncoding="UTF-8" />
		<soap:binding style="rpc"
			transport="http://schemas.xmlsoap.org/soap/http" />
		<operation name="foo">
			<soap:operation soapAction="http://tempuri.org/action/Simple.foo" />
			<input>
				<soap:body use="encoded" namespace="http://tempuri.org/message/"
					encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
			</input>
			<output>
				<soap:body use="encoded" namespace="http://tempuri.org/message/"
					encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
			</output>
		</operation>
	</binding>
	<service name="FOOSAMPLEService">
		<port name="SimplePort" binding="wsdlns:SimpleBinding">
			<soap:address location="http://carlos:8080/FooSample/FooSample.asp" />
		</port>
	</service>
</definitions>
你把里面的地址那些弄出来直接跑就是。如果要生成的话可以用eclipse的
软件开发者 2014-03-26
  • 打赏
  • 举报
回复
引用 6 楼 zcwgogo 的回复:
可怜的娃,直接用eclipse的生成工具生成客户端代码就OK了。webservice肯定是给你一个wsdl啊,要么给你什么。。 可以用axis2直接调用也行,直接在WSDL里面找到地址和方法名参数。
那他为什么非要说是soap呢,还要给我传数据。我很纳闷他怎么给我传。
zcwgogo 2014-03-26
  • 打赏
  • 举报
回复
用客户端生成的话会生成很大一堆垃圾JAVA类,你用这个方法直接调用会好点,前提是要导入axis2的包:

private String sendService(String param, String url, String method) {
		log.info("InvoicePostService: now post to WMS param is :" + param);
		String result="";
		try {
			RPCServiceClient serviceClient = new RPCServiceClient();

			Options options = serviceClient.getOptions();

			EndpointReference targetEPR = new EndpointReference(url);

			options.setTo(targetEPR);

			QName opAddEntry = new QName( SystemConfig.getProperty("service.invoice.qname"), method);

			Object[] opAddEntryArgs = new Object[] { param };

			Class<?>[] classes = new Class[] { String.class };

			result = (String) serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, classes)[0];

			log.info("The result is :" + result);
		} catch (Exception e) {
			log.error("post  was failed error is :" + ExceptionUtils.getFullStackTrace(e));
			throw new RuntimeException(" post to  was failed error is :"+e.getMessage());
		}
		return result;
	}
zcwgogo 2014-03-26
  • 打赏
  • 举报
回复
可怜的娃,直接用eclipse的生成工具生成客户端代码就OK了。webservice肯定是给你一个wsdl啊,要么给你什么。。 可以用axis2直接调用也行,直接在WSDL里面找到地址和方法名参数。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧