adf4351使用方法_ADF:使用HTTP POST方法进行URL任务流调用

adf4351使用方法

众所周知,可以通过某些URL直接从浏览器或某些外部应用程序调用有限任务流。 如果任务流的属性“ URL invoke”设置为“ URL-invoke-allowed”,则启用此功能,该功能通常在集成项目中使用。 通常,客户端(或调用者)使用HTTP GET方法并在URL中传递其参数。 让我们考虑一个带有一个必需输入参数的简单任务流:

<task-flow-definition id="task-flow-definition">    <input-parameter-definition id="__23"><name id="__24">userName</name><value id="__67">#{requestScope.userName}</value><class id="__63">java.lang.String</class><required/></input-parameter-definition>    ...

可以通过这样的URL调用任务流

http://127.0.0.1:7101/TestApp/faces/adf.task-flow?adf.tfId=task-flow-definition&adf.tfDoc=/WEB-INF/task-flow-definition.xml&userName=xammer

客户端使用简单的html表单构造此GET请求:

<html><head>    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/></head><body><form action="http://127.0.0.1:7101/TestApp/faces/adf.task-flow"><input type="hidden" name="adf.tfId" value="task-flow-definition"/>  <input type="hidden" name="adf.tfDoc" value="/WEB-INF/task-flow-definition.xml"/>  <label>     User Name <input type="text" name="userName" value="xammer"/>  </label><input type="submit" value="Submit"/></form></body>
</html>

它看起来像这样:

屏幕截图2013年8月2日下午5.55.16

一些客户端更喜欢使用HTTP POST方法,这是他们的要求:

<html><head>    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/></head><body><form action="http://127.0.0.1:7101/TestApp/faces/adf.task-flow" method="POST"><input type="hidden" name="adf.tfId" value="task-flow-definition"/>  <input type="hidden" name="adf.tfDoc" value="/WEB-INF/task-flow-definition.xml"/>  <label>     User Name <input type="text" name="userName" value="xammer"/>  </label><input type="submit" value="Submit"/></form></body>
</html>

而且效果很好。 在这种情况下,URL将如下所示:

http://127.0.0.1:7101/TestApp/faces/adf.task-flow

所有其他必要的信息(例如任务流ID和参数值)都在POST请求中。 但是问题在于,它仅对R1有效。 如果我们在R2上进行尝试,将会得到以下结果:

ADF_FACES-30179:有关更多信息,请参见服务器的错误日志中以下列开头的条目:UIViewRoot为空。 PhaseId期间的致命异常:RESTORE_VIEW 1。

为什么? 因此:

oracle.adfinternal.controller.application.InvokeTaskFlowException: ADFC-02006: A task flow ID is not found in the URL.at oracle.adfinternal.controller.util.UrlParams.getTaskFlowInfo(UrlParams.java:144)at oracle.adfinternal.controller.application.RemoteTaskFlowCallRequestHandler.
invokeTaskFlowByUrl(RemoteTaskFlowCallRequestHandler.java:84)at oracle.adfinternal.controller.application.RemoteTaskFlowCallRequestHandler.
doCreateView(RemoteTaskFlowCallRequestHandler.java:63)

本应在POST请求中传递的所有必需数据(包括任务流ID)都将丢失。 为什么? 因为“回送”。 如果在单击“提交”按钮后发现从浏览器发送到服务器的请求,我们将看到以下内容:

屏幕截图2013年8月2日下午6.41.27

屏幕截图2013年8月2日下午6.45.56

因此,服务器不发送“诚实”响应,而是发送一些“回送”脚本,该脚本生成“窗口ID”,并发送以下具有生成的窗口ID的GET请求。 凉! 但是所有发布数据都消失了。 GET请求绝对为空。

幸运的是,如果初始POST请求已经具有一些“窗口ID”,则该框架不会生成任何“环回”。 因此,本例的解决方法是开发一个servlet过滤器,为我们的请求设置“ window id”属性:

public void doFilter(ServletRequest servletRequest,ServletResponse servletResponse,FilterChain filterChain)throws IOException, ServletException
{HttpServletRequest r = (HttpServletRequest) servletRequest;HttpSession s = r.getSession();//May be this is not an initial request and window id has been generated earlier//We want all the following requests to work with the same window id //For our use-case this is ok    String windowID = (String) s.getAttribute(_WINDOW_ID_KEY);if (windowID == null){String pathInfo = r.getPathInfo();//This is an initial POST request to get access to the task flowif (("/adf.task-flow").equals(pathInfo) &&"POST".equals(r.getMethod())){windowID = WINDOW_ID;//Save window id in the session s.setAttribute(_WINDOW_ID_KEY, windowID);}}//Setup attribute for the request//This will prevent generating of the loopbackif (windowID != null)r.setAttribute(_WINDOW_ID_KEY, windowID);filterChain.doFilter(servletRequest, servletResponse);
}private static final String __WINDOW_MANAGER_KEY = RichWindowManager.class.getName();
private static final String _WINDOW_ID_KEY = __WINDOW_MANAGER_KEY + "#WINDOW_ID";  
private static final String WINDOW_ID = "wextflow";

请注意,此过滤器应位于过滤器链中的“特立尼达”过滤器之前:

<filter><filter-name>ExtPostFilter</filter-name><filter-class>com.cs.fusion.core.view.filter.ExtPostFilter</filter-class></filter> <filter><filter-name>trinidad</filter-name><filter-class>org.apache.myfaces.trinidad.webapp.TrinidadFilter</filter-class></filter><filter><filter-name>ServletADFFilter</filter-name><filter-class>oracle.adf.share.http.ServletADFFilter</filter-class></filter>

而已!

参考:来自ADF实践博客的JCG合作伙伴 Eugene Fedorenko 使用HTTP POST方法进行URL任务流调用 。

翻译自: https://www.javacodegeeks.com/2013/08/adf-url-task-flow-call-with-http-post-method.html

adf4351使用方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/347026.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【BCH码1】系统BCH码编码原理及MATLAB实现(不使用MATLAB库函数)

关注公号【逆向通信猿】更精彩!!! BCH编码原理 设一个 ( n , k ) (n,k) (n,k)循环码的生成多项式为 g

【定时同步系列2】16QAM调制+OM定时+信号分段处理+误码率曲线之MATLAB仿真(复信号模型)

关注公号【逆向通信猿】阅读更多内容!!! 算法回顾 关于O&M算法的原理、公式推导与详解,请参考博客: 【定时同步系列1】定时同步之MARTIN OERDER算法原理与公式推导 鉴于前期有很多读者私信博主O&M算法的MATLAB仿真过程,前期太忙没来得及做。终于抽得一日闲,可…

使用Stream.peek在Java Streams内部进行窥视

对于刚接触JDK 8的管道和流的Java开发人员而言&#xff0c; Stream接口提供的peek&#xff08;Consumer&#xff09;方法可以用作可视化流操作行为的有用工具。 即使是更熟悉Java流和聚合操作的Java开发人员&#xff0c;有时也会发现Stream.peek&#xff08;Consumer&#xff0…

【定时同步系列3】8PSK调制+OM定时+信号分段处理+误码率曲线之MATLAB仿真(实信号模型)

关注公号【逆向通信猿】更精彩!!! 仿真结果 对于8PSK调制,仿真结果如下: 误码率曲线图 假设 E b / n 0 = 14 d B Eb/n_0 = 14dB

借助Web技术,桌面用户界面将保持活跃

要了解Java桌面应用程序有什么问题&#xff0c;让我们看一下JavaFX&#xff08;桌面应用程序的领先UI框架&#xff09;的新功能。 很明显&#xff0c;它正在向Web方法发展&#xff0c;从Web世界中借用了越来越多的功能。 JavaFX支持一部分CSS功能&#xff0c;并附带其自己的属性…

Win10窗口侧边栏设置Win7模式

本人非常不喜欢Win10的几个系统功能 贴靠窗口时自动调整窗口大小&#xff0c;填满可用空间关将窗口对齐时&#xff0c;显示能够在其旁边对齐的内容当我调整某个贴靠窗口的大小时&#xff0c;也调整任何相邻贴靠窗口的大小 想调整成Win7那种模式和风格的话&#xff0c;设置如下…

VS2017无法打开文件MSVCRTD.lib

需要添加组件&#xff0c;如下图

groovy 2.5.4_Java 7 vs Groovy 2.1性能比较

groovy 2.5.4自从我与Grails上一次接触以来&#xff0c;我已经有两年没有使用Groovy了。 我陷入&#xff08;硬&#xff09;核心企业Java中&#xff0c;但在后台遇到了一些性能方面的问题。 我几乎错过了学习Spock的机会&#xff0c;但是幸运的是&#xff0c; 华沙Java用户组帮…

【定时同步系列4】QPSK调制+OM定时(FFT实现及频域补偿)+信号分段处理+误码率曲线之MATLAB仿真(复信号模型)

关注公号【逆向通信猿】更精彩!!! 仿真结果 对于QPSK调制,仿真结果如下: **分析:**可以看出,补偿前的定时相位约为-0.1,补偿后的相位在0附近波动,但由于没有进行环路滤波(可采用卡尔曼滤波器),所以波动很大,这也导致了后续解调结果不理想,实际中必须加入滤波器…

Java 10迁移建议

你好&#xff0c;再一次到另一个热点。 我的名字是Java Champions平台工程师兼DevOps专家Peter Pilgrim。 如您所知&#xff0c;Java 9引入了模块系统。 您可能正在将服务迁移到JDK 10或更高版本&#xff0c;或者至少在考虑中。 我对企业的一般建议是&#xff0c;您越早迁移&a…

《调制解调算法》专栏导航贴

关注公号【逆向通信猿】更精彩&#xff01;&#xff01;&#xff01; 通信方面有关信号处理算法的MATLAB仿真&#xff0c;包含博主的一些宝贵经验&#xff0c;不定期更新&#xff01;&#xff01;&#xff01; 本系列博克力求从简到繁&#xff0c;无论是刚接触通信的小白&…

Office系列完全干净卸载工具合集(最全)

使用 Microsoft Fix it 卸载 Microsoft Office 套件 一、Windows 7、Windows Vista或Windows XP下卸载Office 1.MicrosoftEasyFix50416 工具用来卸载office 2003 MicrosoftEasyFix50416_Office2003.msi 2.MicrosoftEasyFix50154 工具用来卸载office 2007 MicrosoftEasyFix50…

谓词::不适合Java

Jim Laskey在OpenJDK core-libs-dev邮件列表上最近的消息“ RFR&#xff1a;CSR – JDK-8203428 Predicate :: not ”指出了JDK Bug JDK-8203428 [“ Predicate :: not”]。 JDK-8203428的“摘要”指出&#xff1a;“引入新的静态方法Predicate :: not&#xff0c;这将使开发人…

缓冲区溢出漏洞攻击之用户登录

登录程序模拟 在以下程序中,可以使用三种不同的方法检查用户输入的账号和密码是否与存储的用户名和密码匹配。通过编译生成可执行文件,并对其进行测试。该程序会将用户输入的账号、密码与名为password.txt的文件中的账号、密码进行比对,如果二者匹配,则授予访问权限。而实…

【锁相环系列1】锁相环的基本原理

关注公号【逆向通信猿】更精彩!!! 基本概念 相位同步 指两个信号的频率相等,相位差为一个固定值。当 ω i = ω 0 \omega_i=\omega_0 ω

【锁相环系列2】数字判决反馈环之BPSK信号解调MATLAB仿真(含环路滤波器参数设置)

关注公号【逆向通信猿】更精彩!!! 仿真结果 频偏补偿之前的星座图,是一个“环”。 频偏补偿后的BPSK信号星座图 解调误码率曲线 <

hadoop emr_在Amazon EMR上运行Hadoop MapReduce作业

hadoop emr不久前&#xff0c;我发布了如何使用CLI设置EMR群集的信息。 在本文中&#xff0c;我将展示如何使用适用于AWS的Java SDK来设置集群。 展示如何使用Java AWS开发工具包执行此操作的最佳方法是展示我认为完整的示例&#xff0c;因此让我们开始吧。 设置一个新的Maven…

Apache Spark中的自定义日志

您是否曾经对运行了几个小时的Spark作业感到沮丧&#xff0c;但由于基础设施问题而失败了。 您会很晚才知道此故障&#xff0c;并浪费了数小时的时间&#xff0c;当Spark UI日志也无法用于事后检查时&#xff0c;它会更加痛苦。 你不是一个人&#xff01; 在这篇文章中&…

【MFC系列1】之简单Win32程序

一、位运算 标志位组合&#xff1a;wParam MK_RBUTTON|MK_CONTROL|MK_SHIFT 标志位的判断&#xff1a;wParam & MK_LBUTTON 标志位的分离&#xff1a;wParam & ~MK_RBUTTON; 二、调用约定 __cdecl_stdcall是C Declaration的缩写&#xff08;declaration&#xff0c…

【MFC系列2】Win32项目转换为MFC项目

关注公号【逆向通信猿】更精彩&#xff01;&#xff01;&#xff01; 一、MFC的组成 a)必须有一个CWinApp的派生类&#xff1b; b)必须用派生类在全局定义一个对象theApp; c)在派生类中必须重写InitInstance虚函数&#xff1b; d)MFC程序就用CWinApp派生类中的InitInstance虚…