我正在开发一些基于Web服务的应用程序,我有一个关于Apache CXF解组的问题.在我们的项目中,我们使用CXF 2.4.1版本.
当某些SOAP请求不正确时(例如某些字段是文本而不是数字),CXF会抛出标准的SOAPFaultException,并使用以下标准字段构建SOAP响应:
<soap:Fault>
<faultcode>soap:Client</faultcode>
<faultstring>Unmarshalling Error: some field missing</faultstring>
</soap:Fault>
Run Code Online (Sandbox Code Playgroud)
项目要求说,如果出现任何故障,系统需要以其他格式响应,例如:
<soap:body>
<ResponseState>
<ErrorCode>2732</ErrorCode>
<ErrorMessage>Unmarshalling Error: some field missing</ErrorMessage>
<ErrorDetails> some details </ErrorDetails>
<some other fields>
...
</ResponseState>
</soap:body>
Run Code Online (Sandbox Code Playgroud)
所以问题是:如何以某种方式覆盖此错误处理并以我的格式响应,而不是默认?
提前致谢.
PS我试图查看一些ValidationEventHandler主体,但它在CXF 2.0及更高版本中以其他方式工作.
我们的Spring Boot(带Gradle)应用程序具有托管在云中的上游.因此,当我们需要从本地计算机与它们进行通信时,我们使用SSH隧道在本地测试应用程序.
因此,通常,如果我需要测试需要来自受限区域的服务器的东西,我会执行以下操作:
1.使用ssh -N myhostcmd控制台启动SSH隧道
2.使用Soring Boot Run/Debug配置从Intellij Idea运行应用程序.
3.完成后关闭隧道(在命令行窗口中按Ctrl + C).
我的问题:
- 我可以直接从IntelliJ Idea中执行这些步骤,设置一些启动隧道的Run/Debug配置,运行应用程序,并在应用程序停止后关闭它吗?
- 我可以在Gradle中设置相同的内容,为隧道创建一些任务并运行它:
./gradlew startTunnel bootRun
提前致谢.
出于某种原因,Java Stream 会生成更多的值(调用迭代器的 hasNext() 和 next() 方法。
这是合成示例。
我有一个迭代器形式的生成器:
@RequiredArgsConstructor
static class TestIterator implements Iterator<Integer> {
private final int bound;
private final Random rnd = new Random();
private int current = 0;
@Override public boolean hasNext() {
return current < bound;
}
@Override public Integer next() {
current = rnd.nextInt(20);
System.out.println("Generated: " + current);
return current;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我正在尝试创建一个由几个迭代器组成的扁平流
public static void main(String... args) {
List<Iterator<Integer>> iterators = asList(
new TestIterator(18),
new TestIterator(18),
new TestIterator(18));
Stream<Integer> streams = iterators.stream()
.map(iter …Run Code Online (Sandbox Code Playgroud)