我正式对这个拦截器感到困惑。
我已将 Jersey 从 2.4.1 升级到 2.5.1,因为 Jersey/Oracle 修复了影响Swagger工作的包扫描错误。经过大量修改与我们基于 Spring 的服务器集成后,2.4.1 工作相对“正常”(spring-jersey3根本不工作。)现在自从升级到 2.5.1(现在是 2.6-SNAPSHOT)后,我收到每次我向与 API URL 模式匹配的任何内容发出请求时,都会出现以下错误。
我做了什么:
非常感谢帮助/解决方法/调试想法...除了废弃 Swagger、几天的工作和回滚到 2.4.1 之外,我什至不知道还能做什么
Feb 12, 2014 15:46:24 ERROR [TP-Processor6] [Catalina].[localhost].[/company
[Jersey REST Service] - Servlet.service() for servlet Jersey REST Service threw
exception java.lang.NoSuchMethodError:
org.glassfish.jersey.internal.util.collection.Values.lazy(Lorg/glassfish/jersey/internal/util
collection/Value;)Lorg/glassfish/jersey/internal/util/collection/Value;
at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:346)
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:372)
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:335)
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:218)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.company.videoapp.server.springframework.SessionFilter.doFilter(SessionFilter.java:44)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at …
Run Code Online (Sandbox Code Playgroud) 我有一个 Jersey 客户端,想要实现重试SocketTimeoutException
,这是我在服务器日志上看到的错误。代码框架如下。webtarget
是一个javax.ws.rs.client.WebTarget
已定义 url 路径和 queryparams 的实例。我面临的问题是webtarget.request.get()
永远不会抛出任何 SocketTimeoutException 所以我实际上无法捕获这个异常。有什么想法我可以实际实施重试吗?
int i = 0;
Response response;
while (true) {
try {
response = webtarget.request().get();
break;
} catch (SocketTimeoutException e){
if (i < retryNumber) {
i++;
} else {
// throws some exception
}
}
}
Run Code Online (Sandbox Code Playgroud) 我试图了解 HK2 Factory 在 Jersey 应用程序中的实现。
目标:如何实现单例工厂?
// Below is the simple factory implementation
public class MyFactory implements Factory<SomeObject> {
private static final Logger logger = LoggerFactory.getLogger(MyFactory.class);
private final CloseableService closeService;
@Inject
public MyFactory(CloseableService closeService) {
this.closeService = closeService;
}
@Override
public MyFactory provide() {
logger.debug("provide object from MyFactory");
SomeObject objectFromFactory = new SomeObject();
this.closeService.add(() -> dispose(objectFromFactory));
return objectFromFactory;
}
@Override
public void dispose(SomeObject instance) {
// destroy instance
logger.debug("dispose object from MyFactory");
}
}
// and binding
bindFactory(MyFactory.class).to(SomeObject.class).in(Singelton.class);
// …
Run Code Online (Sandbox Code Playgroud) 我试图在我的网络服务中反序列化一个 post 请求,但我最终得到一个 HTTP 500 说javax.json.bind.JsonbException: Error deserialize JSON value into type: class [C
. 我正在使用 Jackson 来处理 JSON 内容。
这是我从 Postman 发送的 JSON 字符串:
{"firstName":"FirstName","middleName":"middleName","lastName":"LastName","name":"SomeName","password":"$0meR@nd0m","creationTimeStamp":1533950475466}
Run Code Online (Sandbox Code Playgroud)
这是我的 POJO :
@XmlRootElement
public class UserFormInterceptor {
@Pattern(regexp = "^[\\S][\\p{L} .'-]+$") @Size(min = 2, max = 64) @NotEmpty @NotNull
private String firstName;
@Pattern(regexp = "^[\\S][\\p{L} .'-]+$") @Size(min = 2, max = 64)
private String middleName;
@Pattern(regexp = "^[\\S][\\p{L} .'-]+$") @Size(min = 2, max = 64) @NotEmpty @NotNull
private String lastName;
@Pattern(regexp = …
Run Code Online (Sandbox Code Playgroud) 我可以使用“localhost”从浏览器访问数据。但如果我提到我的系统 IP 地址,应用程序将显示以下错误:
SEVERE: An I/O error has occurred while writing a response message entity to the container output stream.
java.lang.IllegalStateException: The output stream has already been closed.
at org.glassfish.jersey.message.internal.CommittingOutputStream.setStreamProvider(CommittingOutputStream.java:142)
at org.glassfish.jersey.message.internal.OutboundMessageContext.setStreamProvider(OutboundMessageContext.java:812)
at org.glassfish.jersey.server.ContainerResponse.setStreamProvider(ContainerResponse.java:373)
at org.glassfish.jersey.server.ServerRuntime$Responder.writeResponse(ServerRuntime.java:645)
at org.glassfish.jersey.server.ServerRuntime$Responder.processResponse(ServerRuntime.java:395)
at org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:385)
at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:280)
at org.glassfish.jersey.internal.Errors$1.call(Errors.java:272)
at org.glassfish.jersey.internal.Errors$1.call(Errors.java:268)
at org.glassfish.jersey.internal.Errors.process(Errors.java:316)
at org.glassfish.jersey.internal.Errors.process(Errors.java:298)
at org.glassfish.jersey.internal.Errors.process(Errors.java:268)
at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:289)
at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:256)
at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:703)
at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:416)
at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:370)
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:389)
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:342)
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:229)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) …
Run Code Online (Sandbox Code Playgroud) 我有以下适用于 jersey 1.x 的代码。然而,我需要让它与 jersey 2.x 一起工作,并且我注意到很多 jersey 类和方法从一个版本更改为另一个版本。任何想法?
Client client = null;
try {
URLConnectionClientHandler ch = new URLConnectionClientHandler(new ProxyConnectionFactory(proxyHost, proxyPort));
client = new Client(ch);
WebResource webResource = client.resource(url);
ClientResponse response = ((Builder) webResource.type("application/json").header(authKey, authCreds)).post(ClientResponse.class, input);
String output = (String) response.getEntity(String.class);
System.out.println(output);
if (response.getStatus() != 200) {
System.out.println("Status Failed, Status: " + response.getStatus());
}
else {
System.out.println("Connection Successful!");
//additional code
}
} catch (Exception e) {
System.out.println("Exception occurred");
} finally {
client.destroy();
}
Run Code Online (Sandbox Code Playgroud)
在此代码片段中,ProxyConnectionFactory 是一个设置代理配置的类。它实现了 HttpURLConnectionFactory,这也是 jersey 1.x 接口。
我想使用JAX-RS构建RESTful Web服务(Jersey + Jackson,Jackson用于生成JSON).
我使用Glassfish 4.0作为服务器,netbeans作为IDE.
Web服务工作正常,但目前我没有任何身份验证.
所以现在我正在考虑散列密码的摘要验证,这样你就不需要以纯文本形式传输密码了.另外我想使用https,以便加密数据.
我理解了理论.但我不知道我怎么能用Glassfish在Netbeans中做到这一点.
我看到一些教程在glassfish的管理控制台中做了一些事情.但是,有没有办法在netbeans中做到这一点?我不能在部署应用程序时创建的netbeans中定义一个领域吗?
创建领域和东西之后.我想我需要在我的所有资源(WebServices)中注入某种经过身份验证的"用户"-Object.但我以前从未这样做过.我正在寻找一个很好的教程,它描述了我如何设置摘要认证,注入网络netbeans可以用netbeans做到这一点,这样我就能很好地理解它.
按照Up和在MaE,Jersey和Guice的AppEngine上运行的优秀步骤- 第3部分,除了将对象注入Jersey POJO之外,我已经能够完成所有工作.
我从该配置中唯一的区别是我也集成了Objectify,但这是有效的.
TestClass
注入到HelloWorldServlet
工作中的实例(单例),但注入POJO 的TestClass
和SecondTest
(RequestScoped
)对象HeyResource
总是如此null
.
我怀疑HK2和Guice之间的互动应该归咎于此,但这是我与Guice , Jersey 和 HK2的第一个项目,所以我都在海上.
我的配置是:
我使用java/jetty自托管服务器和jersey-2 for java RESTful api.应用程序具有带有属性的application.properties文件.
ConfigurationProperties
class读取属性文件并将其加载到java.util.Properties
类中.
Jetty服务器实例化以下列方式完成.
// Create and register resources
final ResourceConfig resourceConfig = new ApiServiceConfig()
.register(new DependencyInjectionBinder());
ServletContextHandler contextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);
contextHandler.setContextPath("/mydomain/api");
Server jettyServer = new Server(8585);
jettyServer.setHandler(contextHandler);
ServletHolder jerseyServlet = new ServletHolder(new ServletContainer(resourceConfig));
contextHandler.addServlet(jerseyServlet, "/*");
// Create web context. Can't use.
//WebApplicationContext webContext = getWebApplicationContext();
// Add web context to servlet event listener.
//contextHandler.addEventListener(new ContextLoaderListener(webContext));
try {
jettyServer.start();
jettyServer.join();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally …
Run Code Online (Sandbox Code Playgroud) 是否可以在响应中返回错误响应的验证注释消息?我认为这是可能的,但我注意到我们的项目没有给出详细的错误请求消息。
@NotNull(message="idField is required")
@Size(min = 1, max = 15)
private String idField;
Run Code Online (Sandbox Code Playgroud)
如果发出缺少 idField 的请求,我希望看到“需要 idField”。我正在使用球衣 2.0。我看到的回应是这样的......
{
"timestamp": 1490216419752,
"status": 400,
"error": "Bad Request",
"message": "Bad Request",
"path": "/api/test"
}
Run Code Online (Sandbox Code Playgroud) 这是我的 get API 返回员工列表。
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/get")
public List<Employee> getEmployee() {
return employeeFacade.getAllEmployee();
}
Run Code Online (Sandbox Code Playgroud)
我想Employee
从ResponseEntity<String>
.
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
//headers.setContentType(MediaType.APPLICATION_JSON);
Employee employee = new Employee();
HttpEntity<Employee> entity = new HttpEntity<Employee>(employee, headers);
ResponseEntity<String> result = restTemplate.exchange(uri, HttpMethod.GET, entity, String.class);
System.out.println("result:" + result);
Run Code Online (Sandbox Code Playgroud)
如何使这项工作?