Tag: jersey

Jersey – 在调用context.proceed()之前获取Interceptor中OutputStream的内容

在Jersey中使用Interceptor我可以操作Output,但是,我还想在响应中添加一个Header,该值是根据输出结果计算出来的。 @Sha256Sum public class Sha256SumInterceptor implements WriterInterceptor { public static final String SHA256_HASH_HEADER_NAME = “SHA256-SUM”; @Override public void aroundWriteTo(WriterInterceptorContext context) throws IOException, WebApplicationException { // Retrieve the OutputStream, read the contents and calculate the hashsum. // Set the header value in context. context.proceed(); } } 但问题是,当我最终读完整个流时,我无法设置标题,因为调用了context.proceed并写入了内容(从而使我能够用它做任何事情)我再也无法设置标题。 简而言之我的问题:如何将整个流输出捕获为byte [],从字节数组计算结果,最后在对计算结果的响应中设置标头? 我不想耗尽输出流。

@RolesAllowed总是在Jersey资源上拒绝(禁止)

我正在尝试根据我通过Jersey / JAX-RS公开的资源的角色设置身份validation。 此资源存在于Glassfish实例中,其中基于角色(特别是通过@RolesAllowed)的身份validation当前正在按需运行。 我在servlet容器中运行Jersey: com.sun.jersey.spi.container.servlet.ServletContainer 并在我的资源上执行基本身份validation; 该要求正在按预期执行。 我还为Jersey提供了以下初始化参数: com.sun.jersey.spi.container.ResourceFilters com.sun.jersey.api.container.filter.RolesAllowedResourceFilterFactory 但是,当我尝试实际添加@RolesAllowed注释时,所有访问都会失败。 例如: @Path(“/my/resource”) @ManagedBean @RolesAllowed({“SYSTEM”}) public class Resource { // Accesses with credentials for a user that has the SYSTEM role fail! } 如果我注入安全上下文并调用context.isUserInRole(),则会为所有角色返回false。 非常奇怪的是,如果我删除此资源的@RolesAllowed注释,并使用有效凭据发出请求,则此类可以成功访问EJB,这需要用户与我最初尝试测试的角色相同。 似乎泽西可能正在使用错误的SecurityContext进行身份validation,或者其他一些。 还有其他人经历过这个吗?

Spring MVC多个servlet(Jersey,Dispatcher)问题

我的页面有一个DispatcherServlet,我的Jersey webservice有一个ServletContainer。 就像现在一样,没有页面正在渲染(404),但服务工作正常。 我怎么能一起运行它们? 我看到了这个线程如何在一个Spring应用程序中注册web.xml中的多个servlet似乎处理类似的问题,虽然那是关于CXF所以我不确定它是多么相关。 我还尝试了一个单独的Jersey-servlet.xml文件,但这使得页面和服务都停止工作。 从这一点开始不知道该去哪里,任何帮助都非常感激。 web.xml中: HSRMVC index.jsp HSR org.springframework.web.servlet.DispatcherServlet HSR *.html Jersey REST Service com.sun.jersey.spi.container.servlet.ServletContainer se.hsr.services HSRMVC Jersey REST Service /* HSR-sevlet.xml: 更新的web.xml HSRMVC index.jsp HSR org.springframework.web.servlet.DispatcherServlet 1 HSR *.html contextConfigLocation /resources/applicationContext.xml /WEB-INF/service-beans.xml service-beans com.sun.jersey.spi.container.servlet.ServletContainer se.hsr.services HSRMVC 2 service-beans /*

在Java Jersey 2 JAX-RS中初始化单例

我是泽西岛的新手(2.22.2),请耐心等待。 我正在创建一个与LDAP服务器连接的REST服务,用于存储,删除和检索用户数据。 该服务通过执行加密/解密充当安全中介。 在使用REST服务之前必须进行相当多的初始化,并且我只想执行一次初始化(当应用程序部署在服务器上时)。 所以这项服务将作为单身人士运行。 如果有人可以给我一些关于最佳方法的指示,我将不胜感激吗? 谢谢!

Java / Jersey – 使用ParamInjectionResolver创建自己的注入解析器 – 奇怪的行为

我正在尝试创建一个注射旋转变压器。 我有一个数据类: public class MyData { … } 我有以下注释: @Target({ElementType.FIELD, ElementType.PARAMETER}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface MyDataInject { } 我的注射解析器看起来像这样: public class MyDataInjectionResolver extends ParamInjectionResolver { public MyDataInjectionResolver () { super(MyDataValueFactoryProvider.class); } @Singleton public static class MyDataValueFactoryProvider extends AbstractValueFactoryProvider { @Inject public MyDataValueFactoryProvider(MultivaluedParameterExtractorProvider provider, ServiceLocator locator) { super(provider, locator, Parameter.Source.UNKNOWN); } @Override protected Factory createValueFactory(Parameter parameter) […]

ExceptionMapper在grizzly中不起作用

抱歉我的英语不好。 我正在使用灰熊和jersey来构建一个Web应用程序。 我这样实施 ErrorModel errorModel = new ErrorModel(“1”, “1”, “1”); WebApplicationException applicationException = (WebApplicationException) exception; return Response.status(applicationException.getResponse().getStatus()).type(MediaType.APPLICATION_JSON_TYPE).entity(errorModel).build(); 当我访问一个不存在的页面时。 我发现它抛出WebApplicationException。 所以我调试并发现正在调用此方法并返回上面的响应。 但最后http响应是一个由grizzly构建的html页面。 我该怎么办

Jersey / Jaxb别名bean列表

我有一个界面 @Path(“basePath”) @Produces(MediaType.APPLICATION_XML) @Consumes(MediaType.APPLICATION_XML) public interface SomeService { @GET @Path(“list”) public List getItems() throws WebApplicationException; } 还有一个豆子 @XmlRootElement(name = “item”) @XmlAccessorType(XmlAccessType.FIELD) public class ItemBean { @XmlElement(name = “name”) private String someName; @XmlElement(name = “description”) private String desc20Char; ….. 如果我提出请求,我的回复是 foo bar ….etc…. 除了itemBeans标签之外,所有这些都很好。 如何将其重命名为项目? 我尝试将@XmlElement(name =“items”)添加到接口的方法,实现类的方法和返回参数。 我错过了什么吗? 谢谢

接受List作为Jersey Web服务的参数,该Web服务使用多部分的内容类型

我有一个现有的Jersey webservice方法,它通过Http POST方法接受许多参数,该方法用于处理标准表单数据,application / x-www-form-urlencoded的内容类型; 其中一个参数是字符串列表。 下面是我拥有的方法签名的示例。 @POST @Consumes(MediaType.APPLICATION_FORM_URLENCODED) public Response createItem( @FormParam(“p1”) long p1, @FormParam(“p2”) String p2, @FormParam(“p3”) List p3, @FormParam(“p4”) String p4, @Context UriInfo uriInfo ) throws SQLException { 这是正常工作,当在List中传递多个p3参数时,Jersey正确生成并传递给方法。 我现在需要制作一个可以接受多部分请求的方法的替代版本,这样文件也可以与现有参数一起上传。 所以我创建了一个非常相似的方法签名来使用多部分请求,如下所示。 @POST @Consumes(MediaType.MULTIPART_FORM_DATA) public Response createItemWithFile( @FormDataParam(“p1”) long p1, @FormDataParam(“p2”) String p2, @FormDataParam(“p3”) List p3, @FormDataParam(“p4”) String p4, @FormDataParam(“file”) InputStream inputStream, @Context […]

如何使用Grizzly / Jersey获取客户端地址以进行日志记录?

我正在使用Grizzly来提供Jersey应用程序,同时使用Logback来满足我的日志记录需求。 请注意,这里没有涉及Servlet ,我使用一段代码“手动”启动所有内容,如下所示: final URI uri = /* this is a configuration option */ this.server = new HttpServer(); final NetworkListener nl = new NetworkListener( “grizzly”, uri.getHost(), uri.getPort()); server.addListener(nl); final GuiceComponentProviderFactory gcpf = new GuiceComponentProviderFactory(rc, inj); final HttpHandler processor = ContainerFactory.createContainer( HttpHandler.class, rc, gcpf); this.server.getServerConfiguration().addHttpHandler( processor, uri.getPath()); server.start(); 现在我想使用Logback的MDCfunction使客户端的套接字地址在日志记录中可见。 为此,我需要一些地方来连接一个HTTP处理的监听器,它会收到有关传入请求的通知(我可以将地址放入MDC)以及请求完成时(因此我可以清理MDC)。 我遵循的一种方法是使用Jersey连接Container*Filter实例,如下所示: class MdcFilter implements ContainerRequestFilter, ContainerResponseFilter […]

无法获得json的所有值

我试图使用rest webservice将从数据库获取的值返回到前端视图,但问题是它只返回json值的一行(第一行) 我有这样的json: {“jobName”:”NASA Scientist”,”jobPrimarySkill”:null,”jobRole”:”JOB_ROLE”,”jobDesignation”:”JOB_EXP”,”jobDescription”:”Sample 2″,”jobSalaryRange”:”JOB_POSITIONS”,”jobExp”:”JOB_SAL_RANGE”,”jobPositions”:”JOB_POSTEDBY”,”jobPostedBy”:null} {“jobName”:”NASA Scientist”,”jobPrimarySkill”:null,”jobRole”:”JOB_ROLE”,”jobDesignation”:”JOB_EXP”,”jobDescription”:”JOB_DESCRIPTION”,”jobSalaryRange”:”JOB_POSITIONS”,”jobExp”:”JOB_SAL_RANGE”,”jobPositions”:”JOB_POSTEDBY”,”jobPostedBy”:null} {“jobName”:”Web developer”,”jobPrimarySkill”:null,”jobRole”:”JOB_ROLE”,”jobDesignation”:”JOB_EXP”,”jobDescription”:”XYZ 123″,”jobSalaryRange”:”JOB_POSITIONS”,”jobExp”:”JOB_SAL_RANGE”,”jobPositions”:”JOB_POSTEDBY”,”jobPostedBy”:null} {“jobName”:”Web developer”,”jobPrimarySkill”:null,”jobRole”:”JOB_ROLE”,”jobDesignation”:”JOB_EXP”,”jobDescription”:”JOB_DESCRIPTION”,”jobSalaryRange”:”JOB_POSITIONS”,”jobExp”:”JOB_SAL_RANGE”,”jobPositions”:”JOB_POSTEDBY”,”jobPostedBy”:null} {“jobName”:”Programmer”,”jobPrimarySkill”:null,”jobRole”:”JOB_ROLE”,”jobDesignation”:”JOB_EXP”,”jobDescription”:”JOB_DESCRIPTION”,”jobSalaryRange”:”JOB_POSITIONS”,”jobExp”:”JOB_SAL_RANGE”,”jobPositions”:”JOB_POSTEDBY”,”jobPostedBy”:null} {“jobName”:”Programmer”,”jobPrimarySkill”:null,”jobRole”:”JOB_ROLE”,”jobDesignation”:”JOB_EXP”,”jobDescription”:”JOB_DESCRIPTION”,”jobSalaryRange”:”JOB_POSITIONS”,”jobExp”:”JOB_SAL_RANGE”,”jobPositions”:”JOB_POSTEDBY”,”jobPostedBy”:null} 它只将第一行json值返回到前端而不是全部。 我将从数据库中获取的值添加到List并在webservice中公开它,如下所示: public class FetchJobSummaryDAO { public List getJobSummaries() { JobSummaries jobSummaries = new JobSummaries(); List jobSummaryList = new ArrayList(); try { Connection con = DBConnection.getConnection(); String query = “select JOB_NAME,JOB_DESCRIPTION,JOB_ROLE,JOB_PRIMARY_SKILL,JOB_DESIGNATION,JOB_EXP,JOB_SAL_RANGE, JOB_POSTEDBY from TBL_JOBPOSTING”; PreparedStatement pst = con.prepareStatement(query); ResultSet rs […]