- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我如何在 Integration Server 中为 http-503
请求服务不可用错误设置响应 header 。由于它没有命中我的服务,我无法使用 pub.flow:setResponseHeader
设置标题。有什么方法可以让拦截器设置响应 header 吗?
最佳答案
不幸的是,没有用于拦截对 Integration Server 的 HTTP 请求的公共(public) API。
但是您可以使用私有(private) API 来做您想做的事情,即返回 HTTP 503 Service Unavailable
响应到 HTTP GET
或 POST
当请求的服务不存在时向 /invoke
URL 请求。
下面是一个示例类,它实现了 com.wm.app.b2b.server.HTTPHandler
接口(interface),并处理对 /invoke
指令的 HTTP 请求。如果所请求的服务存在,HTTP 请求将被传递到内置的 Integration Server 调用处理程序 com.wm.app.b2b.server.HTTPInvokeHandler
进行处理。如果不存在,则会将您选择的 HTTP 响应代码和消息返回给 HTTP 客户端。
import com.wm.app.b2b.server.AccessException;
import com.wm.app.b2b.server.BaseService;
import com.wm.app.b2b.server.HTTPDispatch;
import com.wm.app.b2b.server.HTTPHandler;
import com.wm.app.b2b.server.HTTPInvokeHandler;
import com.wm.app.b2b.server.ProtocolState;
import com.wm.app.b2b.server.ServerAPI;
import com.wm.app.b2b.server.ns.Namespace;
import com.wm.lang.ns.NSName;
import com.wm.util.Config;
import java.io.IOException;
import java.util.Map;
import java.util.Set;
import java.util.StringTokenizer;
import java.util.TreeMap;
import java.util.TreeSet;
/**
* webMethods Integration Server HTTP invoke handler which returns a
* custom HTTP response code and message when the invoked service does
* not exist.
*/
public class MissingServiceResponseHandler implements HTTPHandler {
private static final String DEFAULT_INVOKE_DIRECTIVE = "invoke";
private static final String INVOKE_DIRECTIVE_CONFIG_KEY = "watt.server.invokeDirective";
private int responseCode;
private String responseMessage;
private Set<String> directives;
private Map<String, HTTPHandler> originalHandlers;
private HTTPInvokeHandler invokeHandler;
private boolean registered;
/**
* Constructs a new MissingServiceResponseHandler that returns the specified
* HTTP response code and message when the invoked service does not exist.
* @param responseCode The HTTP response code returned when the invoked
* service does not exist.
* @param responseMessage The HTTP response message returned when the invoked
* service does not exist.
*/
public MissingServiceResponseHandler(int responseCode, String responseMessage) {
this.responseCode = responseCode;
this.responseMessage = responseMessage;
this.directives = getDirectives();
this.originalHandlers = new TreeMap<String, HTTPHandler>();
this.invokeHandler = new HTTPInvokeHandler();
this.registered = false;
}
/**
* Processes an HTTP request; called by the webMethods Integration Server HTTP request dispatcher.
* @param state The HTTP request to be processed.
* @return True if this object was able to process the HTTP request, otherwise false.
* @throws IOException If an I/O problem is encountered reading from or writing to the client socket.
* @throws AccessException If the the HTTP request requires authentication or is not authorized.
*/
@Override
public final boolean process(ProtocolState state) throws IOException, AccessException {
boolean result;
String directive = getDirective(state);
String path = state.getHttpRequestUrl().substring(directive.length());
StringTokenizer tokenizer = new StringTokenizer(path, "/:");
NSName serviceName = null;
BaseService service = null;
if (tokenizer.countTokens() > 1) {
serviceName = NSName.create(tokenizer.nextToken(), tokenizer.nextToken());
service = Namespace.getService(serviceName);
}
if (serviceName == null || service == null) {
// service does not exist, to return custom response code and message
state.setResponse(responseCode, responseMessage);
result = true;
} else {
state.getInvokeState().setService(service);
result = invokeHandler._process(state, ServerAPI.getContentHandler(state.getContentType()), serviceName);
}
return result;
}
/**
* Returns the relevant directive that matches the given protocol state.
* @param state The protocol state to resolve the directive against.
* @return The relevant directive that matches the given protocol state.
*/
private String getDirective(ProtocolState state) {
String directive = DEFAULT_INVOKE_DIRECTIVE;
if (!state.getHttpRequestUrl().startsWith(directive)) {
directive = Config.getProperty(DEFAULT_INVOKE_DIRECTIVE, INVOKE_DIRECTIVE_CONFIG_KEY);
}
return directive;
}
/**
* Returns all the configured invoke directives for this Integration Server.
* @return All the configured invoke directives for this Integration Server.
*/
private static Set<String> getDirectives() {
Set<String> directives = new TreeSet<String>();
directives.add(DEFAULT_INVOKE_DIRECTIVE);
String alternateDirective = Config.getProperty(DEFAULT_INVOKE_DIRECTIVE, INVOKE_DIRECTIVE_CONFIG_KEY);
if (!DEFAULT_INVOKE_DIRECTIVE.equals(alternateDirective)) {
directives.add(alternateDirective);
}
return directives;
}
/**
* Registers this object as a handler for the invoke directives with the
* Integration Server HTTP request dispatcher.
*/
public synchronized void register() {
if (!registered) {
for (String directive : directives) {
// save the original handler, so we can restore it later
originalHandlers.put(directive, HTTPDispatch.getHandler(directive));
// replace the original handler with this custom handler
HTTPDispatch.addHandler(directive, this);
}
registered = true;
}
}
/**
* Unregisters this object as a handler of the invoke directives from the
* Integration Server HTTP request dispatcher, and reinstates the original
* handlers.
*/
public synchronized void unregister() {
if (registered) {
for (String directive : directives) {
// remove this custom handler from the dispatcher
HTTPDispatch.removeHandler(directive);
// then restore the original handler
HTTPDispatch.addHandler(directive, originalHandlers.get(directive));
}
registered = false;
}
}
}
这个类的使用示例如下:
// create a new handler, specifying the desired HTTP response code and message
// returned when the requested service does not exist
MissingServiceResponseHandler handler = new MissingServiceResponseHandler(503, "Service Unavailable");
// register our custom handler with the Integration Server HTTP request dispatcher
handler.register();
// ...
// now all HTTP requests to the /invoke directive will be handled by our custom handler
// ...
// unregister our custom handler with the Integration Server HTTP request dispatcher, restoring the built-in invoke handler
handler.unregister();
// ...
// now all HTTP requests to the /invoke directive will revert to being handled by the built-in invoke handler
// ...
关于webmethods - Webmethods IntegrationServer http 响应和请求的拦截器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31310933/
我之前让 dll 注入(inject)器变得简单,但我有 Windows 7,我用 C# 和 C++ 做了它,它工作得很好!但是现在当我在 Windows 8 中尝试相同的代码时,它似乎没有以正确的方
我正在尝试制作一个名为 core-splitter 的元素,该元素在 1.0 中已弃用,因为它在我们的项目中起着关键作用。 如果您不知道 core-splitter 的作用,我可以提供一个简短的描述。
我有几个不同的蜘蛛,想一次运行所有它们。基于 this和 this ,我可以在同一个进程中运行多个蜘蛛。但是,我不知道如何设计一个信号系统来在所有蜘蛛都完成后停止 react 器。 我试过了: cra
有没有办法在达到特定条件时停止扭曲 react 器。例如,如果一个变量被设置为某个值,那么 react 器应该停止吗? 最佳答案 理想情况下,您不会将变量设置为一个值并停止 react 器,而是调用
https://code.angularjs.org/1.0.0rc9/angular-1.0.0rc9.js 上面的链接定义了外部js文件,我不知道Angular-1.0.0rc9.js的注入(in
我正在尝试运行一个函数并将服务注入(inject)其中。我认为这可以使用 $injector 轻松完成.所以我尝试了以下(简化示例): angular.injector().invoke( [ "$q
在 google Guice 中,我可以使用函数 createInjector 创建基于多个模块的注入(inject)器。 因为我使用 GWT.create 在 GoogleGin 中实例化注入(in
我在 ASP.NET Core 1.1 解决方案中使用配置绑定(bind)。基本上,我在“ConfigureServices Startup”部分中有一些用于绑定(bind)的简单代码,如下所示: s
我在 Spring MVC 中设置 initBinder 时遇到一些问题。我有一个 ModelAttribute,它有一个有时会显示的字段。 public class Model { privat
我正在尝试通过jquery post发布knockoutjs View 模型 var $form = $('#barcodeTemplate form'); var data = ko.toJS(vm
如何为包含多态对象集合的复杂模型编写自定义模型绑定(bind)程序? 我有下一个模型结构: public class CustomAttributeValueViewModel { publi
您好,我正在尝试实现我在 this article 中找到的扩展方法对于简单的注入(inject)器,因为它不支持开箱即用的特定构造函数的注册。 根据这篇文章,我需要用一个假的委托(delegate)
你好,我想自动注册我的依赖项。 我现在拥有的是: public interface IRepository where T : class public interface IFolderReposi
我正在使用 Jasmine 测试一些 Angular.js 代码。为此,我需要一个 Angular 注入(inject)器: var injector = angular.injector(['ng'
我正在使用 Matlab 代码生成器。不可能包含代码风格指南。这就是为什么我正在寻找一个工具来“ reshape ”、重命名和重新格式化生成的代码,根据我的: 功能横幅约定 文件横幅约定 命名约定 等
这个问题在这里已经有了答案: Where and why do I have to put the "template" and "typename" keywords? (8 个答案) 关闭 8
我开发了一种工具,可以更改某些程序的外观。为此,我需要在某些进程中注入(inject)一个 dll。 现在我基本上使用这个 approach .问题通常是人们无法注入(inject) dll,因为他们
我想使用 swing、spring 和 hibernate 编写一个 java 应用程序。 我想使用数据绑定(bind)器用 bean 的值填充 gui,并且我还希望它反射(reflect) gui
我有这段代码,当两个蜘蛛完成后,程序仍在运行。 #!C:\Python27\python.exe from twisted.internet import reactor from scrapy.cr
要点是 Spring Batch (v2) 测试框架具有带有 @Autowired 注释的 JobLauncherTestUtils.setJob。我们的测试套件有多个 Job 类提供者。因为这个类不
我是一名优秀的程序员,十分优秀!