悬赏 -- 关于如何使用httpInput节点进行post提交

实现附件文件中的“统一接入服务”   使用httpInput post提交

需求是这样的:

由于这边需要集成到总线上的厂家有多个,因此有多个信息系统,由于部分业务流程非常复杂,因此可能其他厂家需要直接调用MQ的发送和接收的函数,但是发送和接收也不能直接给他们用,因为有可能造成的情况是,他们胡乱调用,造成esb瘫痪或者其他问题,而这种情况发生的话我们也不容易发现问题所在,是谁调用导致问题的发生,因此我想到的办法就是,我将MQ发送的函数封装成webservice,其他厂家都需要安全验证来进行调用,若需要回调,则其他厂家调用的时候带上回调的webservice地址,也就是说,其他厂家需要发布一个接收MQ反馈信息的webservice,其他厂家调用我这边MQ发送的webservice之后,由我这边通过调用其他厂家的webservice将反馈信息传递给他们。

现在的问题是,如何使用HttpInput节点进行post提交

get提交我已经实现了,方法如下:

http input -------> Compute --------> http request -------> http reply

http input节点的设置:
Basic(path suffix for url):/ws
Advanced(Parse Query String):勾上

Compute节点设置:
指定data source
ESQL module如下


CREATE COMPUTE MODULE ws_Compute
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
  declare url character;
  declare queryString character;
  declare ws_id character;
  CALL CopyMessageHeaders();
  CALL CopyEntireMessage();
  
  set queryString = InputRoot.HTTPInputHeader."X-Query-String";
  set url = 'http://192.168.100.120:3344/Send.jsp?' || queryString;
  set OutputLocalEnvironment.Destination.HTTP.RequestURL = url;
  set OutputLocalEnvironment.Destination.HTTP.RequestLine.Method = 'GET';
  RETURN TRUE;
END;
CREATE PROCEDURE CopyMessageHeaders() BEGIN
  DECLARE I INTEGER 1;
  DECLARE J INTEGER;
  SET J = CARDINALITY(InputRoot.*[]);
  WHILE I < J DO
   SET OutputRoot.*[I] = InputRoot.*[I];
   SET I = I + 1;
  END WHILE;
END;
CREATE PROCEDURE CopyEntireMessage() BEGIN
  SET OutputRoot = InputRoot;
END;
END MODULE;






上面的实现了get提交的方式,但是post提交的方式就不知道怎么弄了   哪位大哥会的帮帮忙




我是上述需求,跟以下附件解决方案中55页和70页图中的“统一接入服务”差不多  忘各位高手出手相助如何实现




附件:

附件图标基于SOA的应用集成平台规范.part1.rar (6.68 MB)

附件图标基于SOA的应用集成平台规范.part2.rar (2.22 MB)

参与12

11同行回答

xgx1985xgxxgx1985xgx开发工程师lk
回复 11# jtboy01     怎么封装呢  ??显示全部
回复 11# jtboy01


    怎么封装呢  ??收起
2012-03-13
浏览829
jtboy01jtboy01研发工程师四川托日
如果是从MQ中将结果返回给WEB,你将消息组装成一个SOAP包调用请求方WEB就可以了显示全部
如果是从MQ中将结果返回给WEB,你将消息组装成一个SOAP包调用请求方WEB就可以了收起
软件开发 · 2012-03-12
浏览1033
jtboy01jtboy01研发工程师四川托日
回复  liushaoyi     因为MQ传输本身是异步的,有些调用不一定能马上能得到反馈信息,所以我的做法是通 ...xgx1985xgx 发表于 2012-3-10 19:24     请诉在下愚钝,我不清楚你的get和post分别指的那个需求或业务。post是业务调用完成后返回给请...显示全部
回复  liushaoyi


    因为MQ传输本身是异步的,有些调用不一定能马上能得到反馈信息,所以我的做法是通 ...
xgx1985xgx 发表于 2012-3-10 19:24



   

请诉在下愚钝,我不清楚你的get和post分别指的那个需求或业务。post是业务调用完成后返回给请求方的消息吗?收起
软件开发 · 2012-03-12
浏览1017
yawejayaweja系统工程师成都国科海博计算机系统有限公司
回复 7# xgx1985xgx   文件或二进行流 没处理过,不过应该可以将消息按BLOB处理吧显示全部
回复 7# xgx1985xgx


  文件或二进行流 没处理过,不过应该可以将消息按BLOB处理吧收起
互联网服务 · 2012-03-11
浏览1019
xgx1985xgxxgx1985xgx开发工程师lk
回复 5# liushaoyi 的确可以封装成同步,无非就是在我的webservice里面进程等待,直到MQ返回反馈信息之后,webservice才将这个反馈信息返回但是现在基本没用到同步的方式  所以就没写了显示全部
回复 5# liushaoyi

的确可以封装成同步,无非就是在我的webservice里面进程等待,直到MQ返回反馈信息之后,webservice才将这个反馈信息返回但是现在基本没用到同步的方式  所以就没写了收起
2012-03-11
浏览1012
xgx1985xgxxgx1985xgx开发工程师lk
回复 4# yaweja    但是若提交过去的是二进制或者文件流呢  又怎么处理????显示全部
回复 4# yaweja


   但是若提交过去的是二进制或者文件流呢  又怎么处理????收起
2012-03-11
浏览1003
yawejayaweja系统工程师成都国科海博计算机系统有限公司
怎么感觉积分一下少了呢显示全部
怎么感觉积分一下少了呢收起
互联网服务 · 2012-03-10
浏览1034
liushaoyiliushaoyi技术经理华润
MQ本身是异步的,但是你既然做了封装,就可以封装成同步的。我觉得你的设计应该改一下。显示全部
MQ本身是异步的,但是你既然做了封装,就可以封装成同步的。
我觉得你的设计应该改一下。收起
互联网服务 · 2012-03-10
浏览975
xgx1985xgxxgx1985xgx开发工程师lk
回复 2# liushaoyi     因为MQ传输本身是异步的,有些调用不一定能马上能得到反馈信息,所以我的做法是通过webservice调用本地MQ(例如说是A)发送消息,在另外一个MQ节点(例如说B)接收到处理完后再发送一个反馈信息,然后A收到反馈信息之后调用对方的webservice将反馈信息...显示全部
回复 2# liushaoyi


    因为MQ传输本身是异步的,有些调用不一定能马上能得到反馈信息,所以我的做法是通过webservice调用本地MQ(例如说是A)发送消息,在另外一个MQ节点(例如说B)接收到处理完后再发送一个反馈信息,然后A收到反馈信息之后调用对方的webservice将反馈信息发给对方收起
2012-03-10
浏览984
liushaoyiliushaoyi技术经理华润
有个疑问,既然你已经提供一个webservice给外部调用,那就本身已经能够返回信息给对方,那么为什么还得再调用对方的webservice用于返回信息?显示全部
有个疑问,既然你已经提供一个webservice给外部调用,那就本身已经能够返回信息给对方,那么为什么还得再调用对方的webservice用于返回信息?收起
互联网服务 · 2012-03-10
浏览1024

提问者

xgx1985xgx
开发工程师lk

问题状态

  • 发布时间:2012-03-10
  • 关注会员:1 人
  • 问题浏览:9274
  • 最近回答:2012-03-13
  • X社区推广