使用 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) …
我有这个案子:
public class SomeClass<T> {
public <@A1 S extends @A2 T> @A3 S myMethod() { ...}
}
Run Code Online (Sandbox Code Playgroud)
而我正试图@A2在界限上得到注释T.
这就是我所看到的,假设myMethod是SomeClass.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
我必须在 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) 我正在尝试使用用户 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) 从今天早上开始,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永久移动
永久移动
位于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) 在某些情况下,我想强制注销用户.我正在使用Spring Security,我知道如何执行此操作的唯一方法是转发/重定向到/ logout(或者Spring为侦听尝试而侦听的URL).从理论上讲,用户可以阻止他的浏览器遵循重定向,我宁愿前往注销URL,因为执行注销逻辑非常重要.由于Spring在(非)成功注销后总会进行重定向,我想知道这是否会成为一个问题.那么,简而言之,是在转发请求后允许重定向,还是会导致IllegalStateException?
我在这里遇到关于 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)
出现错误“无效谓词”。
如何正确查询呢?
如何使用 Graphql SPQR 库实现 GraphQL 的订阅功能?
我有一个用 Java 实现的 GraphQL 服务器和一个查询它的 JavaScript 客户端。我不喜欢的是客户端只需要知道架构,而不能从服务器获取它,而是针对它动态构建查询。
现在,我明白 GraphiQL 以某种方式做到了这一点,但我猜这是因为它的后端也是用 JavaScript 编写的,所以客户端和服务器都可以使用它。我的模式是用 Java 定义的,但可能有一种方法可以自动生成客户端可以使用的 JavaScript 表示。
这样的东西已经存在了吗?
我已经使用Spring几十年了,但之前从未涉及过这个用例.
有没有办法注入所有使用特定注释注释的bean,例如所有带有@Service或者全部的bean @CustomAnnotation?
我唯一的想法是注入上下文,获取所有 bean并手动过滤.如果这是唯一的方法,那么Spring是否会公开一个递归扫描类层次结构以进行(元)注释的方法(因为大多数Spring注释可以用作元注释)?
java ×8
graphql ×3
spring ×2
annotations ×1
aop ×1
generics ×1
graphql-java ×1
graphql-js ×1
graphql-spqr ×1
java-8 ×1
javascript ×1
jax-rs ×1
jersey ×1
jersey-2.0 ×1
maven-2 ×1
plugins ×1
realm ×1
redirect ×1
reflection ×1
servlets ×1
spring-ioc ×1
spring-mvc ×1
tomcat ×1
websocket ×1