我想在JAX-RS过滤器中捕获并记录响应有效负载.这是我用来拦截响应的过滤器方法的代码片段.(仅供参考 - 我正在使用RestEasy进行实施)
@Override
public void filter(final ContainerRequestContext requestContext, final ContainerResponseContext responseContext) throws IOException {
...
final OutputStream out = responseContext.getEntityStream();
try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
out.write(baos.toByteArray());
....
}
}
Run Code Online (Sandbox Code Playgroud)
但是,ByteArrayOutputStream结果为空.查看RestEasy代码,它使用的是DeferredOutputStream,但不确定在拉动响应有效负载时这将如何重要.我曾尝试直接写入byte [],但这也无济于事.我在这里错过了什么吗?谢谢.
Log4j2 是否支持像 Logback 那样的文件包含机制?这是为了包含来自另一个文件的配置文件的一部分(包含附加程序、记录器等)
仅供参考 - 以下是它在 Logback 中的工作方式:
Joran 支持从另一个文件中包含部分配置文件。这是通过声明一个元素来完成的,如下所示:
示例:文件包含(logback-examples/src/main/java/chapters/configuration/ containsConfig.xml)
<configuration>
<include file="src/main/java/chapters/configuration/includedConfig.xml"/>
<root level="DEBUG">
<appender-ref ref="includedConsole" />
</root>
Run Code Online (Sandbox Code Playgroud)
目标文件必须将其元素嵌套在一个元素内。例如,可以将 ConsoleAppender 声明为:
示例:文件包含(logback-examples/src/main/java/chapters/configuration/includedConfig.xml)
<included>
<appender name="includedConsole" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>"%d - %m%n"</pattern>
</encoder>
</appender>
</included>
Run Code Online (Sandbox Code Playgroud) 我正在使用从JSON事件流转换而来的Dataframes来处理事件,这些事件最终会像Parquet格式一样被写出来.
但是,一些JSON事件在键中包含空格,我想在将它转换为Parquet之前从数据框中记录和过滤/删除这些事件,因为,; {}()\n\t =被认为是Parquet中的特殊字符schema(CatalystSchemaConverter)如下面[1]中所列,因此不应在列名中使用.
如何在Dataframe上对列名进行此类验证,并完全删除此类事件,而不会错误输出Spark Streaming作业.
[1] Spark的CatalystSchemaConverter
def checkFieldName(name: String): Unit = {
// ,;{}()\n\t= and space are special characters in Parquet schema
checkConversionRequirement(
!name.matches(".*[ ,;{}()\n\t=].*"),
s"""Attribute name "$name" contains invalid character(s) among " ,;{}()\\n\\t=".
|Please use alias to rename it.
""".stripMargin.split("\n").mkString(" ").trim)
}
Run Code Online (Sandbox Code Playgroud) apache-spark parquet spark-streaming apache-spark-sql spark-dataframe
我正在尝试将我的应用程序与Spring Integration集成并体验我的自定义spring bean初始化两次,基本上我看到这些bean上的init方法被调用两次,一次是在服务器启动期间,第二次是在HTTP请求时通过DispatcherServlet制作.
这是我的web.xml配置:
<servlet>
<servlet-name>webapp</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/servlet-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>webapp</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
这是我的servlet-config.xml(删除了名称空间)
<import resource="springbeans-config.xml"/>
<context:component-scan base-package="com.test"/>
<context:annotation-config/>
<int:channel id="inboundChannel"/>
<int:channel id="outboundChannel"/>
<http:inbound-gateway request-channel="inboundChannel" reply-channel="outboundChannel" name="/*" supported-methods="GET, POST, PUT, DELETE" reply-timeout="120000"/>
<int:chain input-channel="inboundChannel">
<int:service-activator ref="clearContext"/>
<int:service-activator ref="gatewayFilter"/>
<int:service-activator ref="audit_logger"/>
<int:service-activator ref="gatewayContextHandler" method="process"/>
</int:chain>
Run Code Online (Sandbox Code Playgroud)
如上所示导入包含所有bean定义的自定义文件springbeans-config.xml.例如,下面的bean定义将在服务器启动期间调用两次,同时发出通过DispatcherServlet调用的HTTP请求.
<bean name="sample" class="com.test.SampleImpl" init-method="init">
<property name="xpathHelper" ref="XPathHelper"/>
<property name="cacheManager" ref="cacheManager"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
想知道我在这里失踪了什么.非常感谢任何指针/帮助.谢谢.
================================================== =============
SUMMIntegration示例中的loanhark示例有助于解决此问题.
这是更新的web.xml
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:META-INF/spring/applicationContext*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>gateway</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name> …Run Code Online (Sandbox Code Playgroud) 在IntelliJ上,我通常启用检查以在Java项目中查找硬编码字符串.但是,由于记录器语句中存在硬编码字符串,它可能会产生大量误报.
IntelliJ中是否有任何方法可以忽略此检查中的记录器语句?
在下面的用例中寻找基于正则表达式的Java替换.我正在做一些基于Groovy的XML处理,并且由于一些自定义处理(在这方面不会详细说明),结果XML有一些无效的标签,例如
<?xml version='1.0' encoding='UTF-8'?>
<Customer id="xyz" xmlns='http://abc.com'>
<order orderGroup="mock">
<entry>
<key>test</key>
</entry>
</order orderGroup="mock">
</Customer id="xyz">
Run Code Online (Sandbox Code Playgroud)
如果您注意到,包含属性的元素名称的结束标记会混乱.XML只是被视为一个字符串,所以我想做的是,只需通过基于字符串regex的替换来替换此类结束标记的出现.例如替换
</order orderGroup="mock"> with </order>,
</Customer id="xyz"> with </Customer>
Run Code Online (Sandbox Code Playgroud)
任何想法是否有快速的基于Java String的正则表达式,我可以用来做这样的替换?
谢谢.
我正在寻找一种从 Scala 中的字符串中删除后缀(子字符串)集的惯用方法。
val inputString = "abc@xyz.com"
val suffixes = List("\"", "@xyz.com")
Run Code Online (Sandbox Code Playgroud)
基本上,后缀列表是从外部加载的,因此不是静态的。因此我不能使用链接 stripSuffix 方法的方法
(PS - 我将使用 inputString.stripPrefix("\"") 删除开头的 "