标签: apache-tomee

使用TomEE嵌入的EJB测试EJBContainer api:java.lang.ClassFormatError异常

我将使用TomEE嵌入式EJBContainer测试我的EJB.

这是我的JUnit测试用例框架:

package com.xxx.indexer.scheduler.service;

import java.util.Properties;

import javax.ejb.embeddable.EJBContainer;
import javax.naming.NamingException;

import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

import com.xxx.indexer.scheduler.AbstractTest;

public class BookingAuditServiceImplTest extends AbstractTest {

    private static EJBContainer container;

    @BeforeClass
    public static void start() {
        final Properties props = new Properties();
        props.setProperty(EJBContainer.PROVIDER, "tomee-embedded");
        container = EJBContainer.createEJBContainer(props);
    }

    @AfterClass
    public static void stop() {
        container.close();
    }

    @Before
    public void inject() throws NamingException {
        container.getContext().bind("inject", this);
    }

    @Test
    public void test() {
        // TODO
    }

}
Run Code Online (Sandbox Code Playgroud)

这些是我的maven dependecies:

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId> …
Run Code Online (Sandbox Code Playgroud)

junit ejb apache-tomee

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

为什么注入的UriInfo使用与注入HttpServletRequest不同的主机名?

我正在学习JAX-RS,并且喜欢将URL返回到响应中的其他相关操作.使用Apache TomEE JAX-RS 1.5.1,由于某种原因,注入UriInfo实例提供的URL 始终使用"localhost"作为主机名.

我添加了一个@Context HttpServletRequest,并且getLocalNamegetServerName值都匹配公共主机名.因此,此信息应该可供与TomEE捆绑在一起的CXF-RS运行时使用.目前还不清楚为什么它没有被使用.

下面是测试类和示例输出.如何让TomEE的嵌入式CXF-RS使用正确的主机名?或者,如果这不是正确的方法,我应该如何构建我可以在JAX-RS响应中返回的URL?

@Path("")
public class Test {

    @GET
    @Produces({MediaType.TEXT_PLAIN})
    public String defaultPage(@Context UriInfo uriInfo,
            @Context HttpHeaders hh,
            @Context HttpServletRequest httpServletRequest) {

        StringBuilder response = new StringBuilder();

        response.append("uriInfo.getAbsolutePath(): ");
        response.append(uriInfo.getAbsolutePath());
        response.append("\n");

        response.append("uriInfo.getBaseUri(): ");
        response.append(uriInfo.getBaseUri());
        response.append("\n");

        // snip the repetitive part...

        response.append("httpServletRequest.getServerPort(): ");
        response.append(httpServletRequest.getServerPort());
        response.append("\n\n");

        for (String header : hh.getRequestHeaders().keySet()) {
            response.append(header);
            response.append(":\n");

            for (String value : hh.getRequestHeaders().get(header)) {
                response.append("\t");
                response.append(value);
                response.append("\n");
            }
        }

        return response.toString();
    }

} …
Run Code Online (Sandbox Code Playgroud)

jax-rs hateoas cxfrs apache-tomee

5
推荐指数
0
解决办法
3875
查看次数

如何从IntelliJ IDEA中的RESTful Java代码生成WADL?

我在IntelliJ IDEA 12.1.3 Ultimate中有一个简单的RESTful服务.

我测试过了.有用.现在我想为这个服务创建一个Java客户端,需要一个WADL.

每在说明http://wiki.jetbrains.net/intellij/RESTful_WebService,我右键点击我的课,去"Web服务- > REST Web服务"才发现菜单项禁用"从Java代码生成WADL".

我做错了什么?

这是代码:

package com.mybiz;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

@Path("/greeting")
public class Greeter {
    @GET
    @Produces("text/plain")
    public String hello() {
        return "Hi!";
    }
}
Run Code Online (Sandbox Code Playgroud)

更新

似乎使用TomEE作为应用程序服务器会禁用此功能.我猜测应用服务器是WADL生成的地方,我没有使用IntelliJ理解的应用服务器.

我对吗?如果我切换应用程序服务器它会工作吗?我应该使用什么应用服务器?

intellij-idea wadl java-ee apache-tomee

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

Tomee 1.5.2 JAX-RS与Jackson 1.9.12

我一直在努力让Tomee 1.5.2 JAX-RS与杰克逊合作.我想我已经尝试了100种方法.
这是我的最后一次尝试:

我在conf/system.properties中添加了以下内容:

openejb.cxf.jax-rs.providers = org.codehaus.jackson.jaxrs.JacksonJsonProvider, org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider 
Run Code Online (Sandbox Code Playgroud)


我在Tomee的lib文件夹中添加了:

  • 杰克逊映射器-ASL-1.9.12.jar
  • 杰克逊核心ASL-1.9.12.jar
  • 杰克逊JAXRS-1.9.12.jar


我在一个干净的NetBeans Maven Web项目中有一个简单的JAX-RS类.Mirc是一个名字和车的POJO.

...imports
@Path("")
public class MyJson {
@GET
@Produces(APPLICATION_JSON)
public Object myMeth() {
    return new Mirc("Peter", "BMW");
}
Run Code Online (Sandbox Code Playgroud)

我一直得到"没有为响应类myclass找到消息正文编写器".
我错过了什么?我怎样才能让它发挥作用?我已经检查了stackoverflow上的所有帖子但没有成功.
我真的很感激一些帮助.谢谢.

jax-rs java-ee jackson apache-tomee tomee

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

java.lang.IllegalArgumentException:不支持的类文件主要版本 58

我已经在 Eclipse 中包含了 TomEE,以便开始开发动态 Web 项目(我还是新手)。

在将项目添加到 TomEE 服务器之前,我可以毫无问题地启动它。

但是当我将项目添加到服务器并尝试运行它时,我收到错误: java.lang.IllegalArgumentException: Unsupported class file major version 58

我试图做的是为了解决它:

  • 更改服务器端口号
  • 删除并重新创建服务器
  • 检查web.xml文件以确保 servlet 映射正常
  • 重新配置项目的目标运行时
  • 重新配置eclipse的运行环境

版本:

  • TomEE: v8.0.3 羽
  • JDK:15.0.1
  • 日食:4.17.0

测试项目代码

测试服务程序

package my.test.project;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class TestServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/plain");
        PrintWriter out = response.getWriter();
        out.println("Hello this is a test");
        out.close();
    }
}
Run Code Online (Sandbox Code Playgroud)

网页.xml …

java eclipse apache-tomee unsupported-class-version

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

Arquillian 在多个测试方法中重用 RequestScoped Bean

我的 JEE 6 应用程序使用 CDI 以及带有嵌入式 tomee (1.7.2) 的 Arquillian 来测试它。在具有多个测试方法的测试类中,同一个 Request Scoped Bean 实例被注入到多个测试方法中。当应用程序部署在独立的 tomee plus 1.7.2 上时,不会出现该问题。

根据arquillian 文档,请求范围的 bean 实例只能用于一种测试方法。不幸的是 tomee 嵌入了自己,Arquillian 文档中没有提到它。这是 tomee 嵌入的已知限制吗?如果没有,如何修复?

服务等级:

@RequestScoped
public class SomeService
{
    private String user;

    public String execute(final String pNewUser)
    {
        if(user == null){
            user = pNewUser;
        } 
        return user;
    }
}
Run Code Online (Sandbox Code Playgroud)

测试级:

@RunWith(Arquillian.class)
public class TestCase
{

    @Inject
    private SomeService someService;

    @Deployment
    public static WebArchive createDeployment()
    {
        return DefaultMicroDeploymenCreator.createDefaultMicroDeplymentWithFileName("TestCase.war");
    }

    @Test
    public void testFirstTestMethod() throws …
Run Code Online (Sandbox Code Playgroud)

java java-ee-6 jboss-arquillian apache-tomee jakarta-ee

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

找不到TomEE数据源

关于TomEE和使用tomee.xml中指定的数据源,我有一个奇怪的问题。可能值得注意的是,我正在使用Netbeans,TomEE和MySQL。在Ubuntu 13.04上运行(最新的Xubuntu)

tomee.xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<tomee>
    <Resource id="booktablesDS" type="DataSource">
        JdbcDriver com.mysql.jdbc.Driver
        JdbcUrl jdbc:mysql:localhost:3306/book_tables
        UserName juser
        Password jpassword
        JtaManaged true
    </Resource>
</tomee>
Run Code Online (Sandbox Code Playgroud)

和一个小的代码片段,测试连接池:

@Resource DataSource booktablesDS;

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {

    Connection c = booktablesDS.getConnection();
    Statement stmt = c.createStatement();
    ResultSet rs = stmt.executeQuery("SELECT * FROM BOOKS");
Run Code Online (Sandbox Code Playgroud)

我从TomEE获得的输出是:

SEVERE: null
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
Run Code Online (Sandbox Code Playgroud)

完整的堆栈跟踪如下。

May 06, 2013 11:08:53 AM org.apache.catalina.util.LifecycleBase start
INFO: The start() method …
Run Code Online (Sandbox Code Playgroud)

java netbeans ejb jdbc apache-tomee

2
推荐指数
1
解决办法
1706
查看次数

在TomEE中使用Jersey RESTful Web服务

我在使用带有TomEE服务器的Jersey运行简单的RESTful Web服务时遇到了一些问题.(这是我正在遵循的教程:http://www.vogella.com/tutorials/REST/article.html虽然我使用Maven作为我的依赖项,而TomEE JAX-RS作为我的服务器).当我运行服务器时,我收到以下错误:

org.apache.openejb.OpenEJBException: Unable to load servlet class: org.glassfish.jersey.servlet.ServletContainer: org.glassfish.jersey.servlet.ServletContainer
at org.apache.openejb.config.AnnotationDeployer$ProcessAnnotatedBeans.deploy(AnnotationDeployer.java:2113)
at org.apache.openejb.config.AnnotationDeployer$ProcessAnnotatedBeans.deploy(AnnotationDeployer.java:1843)
at org.apache.openejb.config.AnnotationDeployer.deploy(AnnotationDeployer.java:360)
at org.apache.openejb.config.ConfigurationFactory$Chain.deploy(ConfigurationFactory.java:401)
at org.apache.openejb.config.ConfigurationFactory.configureApplication(ConfigurationFactory.java:962)
at org.apache.tomee.catalina.TomcatWebAppBuilder.startInternal(TomcatWebAppBuilder.java:1214)
at org.apache.tomee.catalina.TomcatWebAppBuilder.configureStart(TomcatWebAppBuilder.java:1087)
at org.apache.tomee.catalina.GlobalListenerSupport.lifecycleEvent(GlobalListenerSupport.java:130)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5378)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1575)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1565)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Run Code Online (Sandbox Code Playgroud)

servlet类派生自我的web.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name>RestTest</display-name>
  <servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <!-- Register resources and providers under com.vogella.jersey.first package. -->
    <init-param>
      <param-name>jersey.config.server.provider.packages</param-name>
      <param-value>com.vogella.jersey.first</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet> …
Run Code Online (Sandbox Code Playgroud)

java servlets maven apache-tomee tomee

2
推荐指数
1
解决办法
3038
查看次数

如何在 TomEE ActiveMQ 中打开调度程序支持

我从未配置过 activemq,我只是使用 TomEE Plus 1.7.1 中的完全默认配置,并且它运行良好。我使用 JMS 进行异步电子邮件发送。现在我想使用调度程序支持,如下所示:

...
message.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY,
    delayMinute * 60000);
...
Run Code Online (Sandbox Code Playgroud)

但消息并没有延迟。我读到 SchedulerSupport 应该在 xml 文件(可能是 activemq.xml (?))中打开,但我没有这样的文件。

我在 tomee.xml 中尝试了这个,但它不起作用:

<Resource id="myActiveMQResourceAdapter" type="ActiveMQResourceAdapter">
    schedulerSupport = true
</Resource>
Run Code Online (Sandbox Code Playgroud)

我应该将 SchedulerSupport = true 配置属性放在哪里?我不想宣布新的经纪人或任何其他事情。只是我想使用默认设置加上调度程序支持

activemq-classic scheduler apache-tomee

2
推荐指数
1
解决办法
6249
查看次数

httpd 重复 Access-Control-Allow-Origin 并带有“始终设置标头”

我正在尝试在我的服务器上启用 CORS。它同时托管 Apache HTTPD 和 Apache Tomee。HTTPD 配置为:

SetEnvIf Origin "^https://(.+\.)?my-domain.com$" allowed_origin=$0
Header always set Access-Control-Allow-Origin %{allowed_origin}e env=allowed_origin
Header set Access-Control-Allow-Credentials "true"
Header set Access-Control-Allow-Methods "GET, POST, OPTIONS, HEAD, PUT, DELETE, PATCH"
Header set Access-Control-Allow-Headers "accept,x-requested-method,origin,x-requested-with,x-request,cache-control,content-type"
Header set Access-Control-Max-Age "600"
Run Code Online (Sandbox Code Playgroud)

和我的 Tomee web XML:

<filter>
  <filter-name>CorsFilter</filter-name>
  <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
  <init-param>
    <param-name>cors.allowed.headers</param-name>
    <param-value>Origin,Accept,X-Requested-With,Content-Type,Access-Control-Request-Method,Access-Control-Request-Headers,Accept-Language,Keep-Alive</param-value>
  </init-param>
  <init-param>
    <param-name>cors.allowed.methods</param-name>
    <param-value>GET,POST,HEAD,OPTIONS,PUT,PATCH,DELETE</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>CorsFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)

我的问题是我Access-Control-Allow-Credentials在对预检选项请求的响应中获得了两次标题:

HTTP/1.1 200 OK
Access-Control-Allow-Origin: https://my-origin.my-domain.com
Access-Control-Allow-Origin: https://my-origin.my-domain.com
Access-Control-Allow-Credentials: true
Access-Control-Max-Age: 600
Access-Control-Allow-Methods: GET, POST, OPTIONS, HEAD, PUT, …
Run Code Online (Sandbox Code Playgroud)

apache http-headers cors apache-tomee

2
推荐指数
2
解决办法
5188
查看次数