小编kaq*_*qao的帖子

WebSphere Liberty Core 抛出 java.io.IOException: Stream is closed

使用 WebSphere Liberty Core (WLC: 8.5.5.1 (wlp-1.0.3.20130510-0831)) 时,我在日志中随机看到以下错误。在其他应用程序服务器上,这不会发生。我不知道这在代码中的什么地方发生...看起来 Spring 3.1.3 几乎正在尝试做一些乱序的事情。有没有人解决过这个问题?

[03/06/14 20:04:33:232 BST] 000000cb com.ibm.ws.webcontainer.util.ApplicationErrorUtils E SRVE0777E:应用程序类“com.ibm.wsspi.http.HttpOutputStream.validate:187”抛出异常java.io.IOException:流在 com.ibm.wsspi.http.HttpOutputStream.validate(HttpOutputStream.java:187) at com.ibm.wsspi.http.HttpOutputStream.flush(HttpOutputStream.java:555) 处关闭。 ibm.ws.webcontainer.osgi.response.WCOutputStream.flush(WCOutputStream.java:213) 在 org.springframework.security.web.context.SaveContextOnUpdateOrErrorResponseWrapper$SaveContextServletOutputStream.flush(SaveContextOnUpdateOrErrorResponseWrapper.java:354) 在 org.springframework.http Converter.AbstractHttpMessageConverter.write(AbstractHttpMessageConverter.java:180) 在 org.springframework.web.servlet.mvc.method。annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:137) at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.orgmeth.java:80.springframework) at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters. annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:94) at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:69) at org.springframework.web.servlet.mvc.methodServletInvocable.annotation invokeAndHandle(ServletInvocableHandlerMethod.java:118) 在 org.springframework.web.servlet.mvc.method.annotation。RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:604) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:565) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter。 handle(AbstractHandlerMethodAdapter.java:80) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852) at org.springframework .web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) 在 org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:575) ) 在 javax.servlet.http.HttpServlet。service(HttpServlet.java:668) at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1240) at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:760)在 com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:443) 在 com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:127) 在 com.ibm.ws.webcontainer .filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:88) 在 org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) 在 org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259) ) 在 com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:194) 在 com.ibm.ws.webcontainer.filter。WebAppFilterChain.doFilter(WebAppFilterChain.java:85) …

java websphere-liberty

5
推荐指数
1
解决办法
2296
查看次数

如何在泛型边界上获取TYPE_USE注释

我有这个案子:

public class SomeClass<T> {
    public <@A1 S extends @A2 T> @A3 S myMethod() { ...}
}
Run Code Online (Sandbox Code Playgroud)

而我正试图@A2在界限上得到注释T.
这就是我所看到的,假设myMethodSomeClass.class.getDeclaredMethod("myMethod").为了便于阅读,删除了类型转换.

  • myMethod.getGenericReturnType().getAnnotations()返回@A1(正如预期的那样,我猜)
  • myMethod.getGenericReturnType().getBounds()[0].getAnnotations()没有回报(??不是@A2吗?)
  • myMethod.getAnnotatedReturnType().getAnnotations()返回@A3(正如预期的那样,我猜)
  • myMethod.getAnnotatedReturnType().getAnnotatedBounds()[0].getAnnotations()什么都不返回(我猜是例外)

它似乎@A2迷路了......这听起来不合理.我做错了什么或这确实是一些奇怪的行为?

更新:这确实是一个JDK错误,我报告并且它被接受为JDK-8191466

java generics reflection annotations java-8

5
推荐指数
1
解决办法
411
查看次数

如何使用 Spring 实现自定义 WebSocket 子协议

我必须在 Spring Boot 应用程序中添加对自定义 WebSocket 子协议(因此不是 STOMP)的支持,但我很难理解我需要提供什么以及 Spring 已经拥有什么。

这就是我走了多远:

@Configuration
@EnableWebSocket
public class WebSocketAutoConfiguration implements WebSocketConfigurer {

    public void registerWebSocketHandlers(WebSocketHandlerRegistry webSocketHandlerRegistry) {
        webSocketHandlerRegistry.addHandler(this.webSocketHandler(), new String[]{endpointUrl});
    }

    @Bean
    public WebSocketHandler webSocketHandler() {
        ExecutorSubscribableChannel clientInboundChannel = new ExecutorSubscribableChannel();
        ExecutorSubscribableChannel clientOutboundChannel = new ExecutorSubscribableChannel();
        SubProtocolWebSocketHandler subProtocolWebSocketHandler = new SubProtocolWebSocketHandler(clientInboundChannel, clientOutboundChannel);
        subProtocolWebSocketHandler.addProtocolHandler(new SubProtocolHandler() {
            public List<String> getSupportedProtocols() {
                return Collections.singletonList("custom-protocol");
            }

            public void handleMessageFromClient(WebSocketSession session, WebSocketMessage<?> message, MessageChannel outputChannel) throws Exception {
                session.sendMessage(new TextMessage("some message"));
            }

            public void handleMessageToClient(WebSocketSession session, Message<?> message) throws …
Run Code Online (Sandbox Code Playgroud)

java spring websocket spring-websocket

5
推荐指数
1
解决办法
4144
查看次数

从 Jersey 过滤器或拦截器内部访问资源方法参数。或者使用带有资源方法的 AOP

我正在尝试使用用户 ID 在每个请求上丰富 SLF4J MDC。问题是ID可以通过多种方式传递,有时作为路径参数,有时在正文中,有时由ValueFactoryProvider首先解密它的自定义注入。

如果我能以某种方式访问​​所有注入的(即已经反序列化的)参数值,我就可以轻松处理所有这些情况。

例如

对于资源,例如:

@GET
//@Encrypted params are injected by a custom ValueFactoryProvider
public Something getSomething(@Encrypted("userId") String userId) {
    return ...;
}

@POST
public Something getSomething(@RequestBody RequestWithUserId requestWithUserId) {
    return ...;
}
Run Code Online (Sandbox Code Playgroud)

我可以有一个过滤器,例如:

public class MdcFilter implements ContainerRequestFilter, ContainerResponseFilter {

    @Context
    private ResourceInfo resourceInfo;

    @Override
    public void filter(ContainerRequestContext requestContext) throws IOException {
        Method theMethod = resourceInfo.getResourceMethod();
        for (Parameter parameter : theMethod.getParameters()) {
            //Deal with the @Encrypted case
            if (parameter.isAnnotationPresent(Encrypted.class) && parameter.getAnnotation(Encrypted.class).value().equals("userId")) { …
Run Code Online (Sandbox Code Playgroud)

java aop jax-rs jersey jersey-2.0

5
推荐指数
1
解决办法
996
查看次数

从今天早上开始,Maven就失败了tomcat-maven-plugin

从今天早上开始,Maven无法构建任何需要tomcat-maven-plugin的项目.我尝试使用minimalistic pom.xml,只有一个依赖项,但在所有情况下我得到以下内容:

[INFO]构建POM时出错(可能不是此项目的POM).

项目ID:org.codehaus.mojo:tomcat-maven-plugin

原因:从存储库获取'org.codehaus.mojo:tomcat-maven-plugin'的POM时出错:无法读取元数据的本地副本:无法从'C:\ Users\***\.m2\repository \读取元数据org\codehaus\mojo\tomcat-maven-plugin\maven-metadata-codehaus releases.xml':结束标记名称必须与开始标记名称匹配


从第7行(位置:TEXT见...... \n ... @ 9:8)
org.codehaus.mojo:tomcat-maven-plugin:pom:LATEST

对于项目org.codehaus.mojo:tomcat-maven-plugin

首先,我尝试删除本地数据和重新下载,但我刚刚遇到校验和失败.我打开maven-metadata-codehaus releases.xml只是为了看到里面的内容:

301永久移动

永久移动

该文件已移至https://nexus.codehaus.org/content/repositories/releases/org/codehaus/mojo/tomcat-maven-plugin/maven-metadata.xml.


位于repository.codehaus.org的Apache/2.0.52(Red Hat)服务器端口80

我厌倦了更改版本和存储库,但没有任何帮助.任何人的想法?

PS这是我试过的最小的pom:

<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>org.codehaus.mojo</groupId>
<artifactId>my-project</artifactId>
<version>1.0</version>

<pluginRepositories>
<pluginRepository>
<id>Codehaus Snapshots</id>
<url>http://snapshots.repository.codehaus.org/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</pluginRepository>
</pluginRepositories>

<build>
<finalName>my-webapp</finalName>
<plugins>

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
</plugin>

</plugins>

</build>
</project>
Run Code Online (Sandbox Code Playgroud)

plugins tomcat maven-2

4
推荐指数
1
解决办法
5126
查看次数

转发后允许重定向请求吗?

在某些情况下,我想强制注销用户.我正在使用Spring Security,我知道如何执行此操作的唯一方法是转发/重定向到/ logout(或者Spring为侦听尝试而侦听的URL).从理论上讲,用户可以阻止他的浏览器遵循重定向,我宁愿前往注销URL,因为执行注销逻辑非常重要.由于Spring在(非)成功注销后总会进行重定向,我想知道这是否会成为一个问题.那么,简而言之,是在转发请求后允许重定向,还是会导致IllegalStateException?

java redirect servlets spring-mvc spring-security

4
推荐指数
1
解决办法
666
查看次数

如何在graphql中查询两个日期之间的时间

我在这里遇到关于 GraphQL 中领域查询的问题。

graphql 可以查询两个日期之间的数据吗?

这是我尝试过的:

query getStudents{
  student(query:"created_datime BETWEEN {'2018-02-24T14:59:43.842Z','2018-02-28T14:59:43.842Z'}"){
    id
    code
    name
    created_datetime
    modified_datetime
    status
  }
}
Run Code Online (Sandbox Code Playgroud)

出现错误“无效谓词”。

如何正确查询呢?

java realm graphql

4
推荐指数
1
解决办法
1万
查看次数

4
推荐指数
1
解决办法
1990
查看次数

将 GraphQL 模式从非 JS 服务器暴露给 JS 客户端

我有一个用 Java 实现的 GraphQL 服务器和一个查询它的 JavaScript 客户端。我不喜欢的是客户端只需要知道架构,而不能从服务器获取它,而是针对它动态构建查询。

现在,我明白 GraphiQL 以某种方式做到了这一点,但我猜这是因为它的后端也是用 JavaScript 编写的,所以客户端和服务器都可以使用它。我的模式是用 Java 定义的,但可能有一种方法可以自动生成客户端可以使用的 JavaScript 表示。

这样的东西已经存在了吗?

javascript java graphql graphql-js

3
推荐指数
1
解决办法
1143
查看次数

使用特定注释注入所有bean

我已经使用Spring几十年了,但之前从未涉及过这个用例.

有没有办法注入所有使用特定注释注释的bean,例如所有带有@Service或者全部的bean @CustomAnnotation

我唯一的想法是注入上下文,获取所有 bean并手动过滤.如果这是唯一的方法,那么Spring是否会公开一个递归扫描类层次结构以进行(元)注释的方法(因为大多数Spring注释可以用作元注释)?

java spring spring-ioc

3
推荐指数
1
解决办法
332
查看次数