1

我正在尝试让 JNDI 资源创建与 Jetty 9 Maven 插件一起使用。相同的配置在 Jetty 8 上正常工作,但java.lang.IllegalStateException: No suitable constructor在 Jetty 9 上产生。以下是相关文件:

pom.xml:

<?xml version="1.0"?>
<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.example</groupId>
  <artifactId>jetty-jndi</artifactId>
  <version>1.0</version>
  <build>
    <plugins>
      <plugin>
        <!-- <groupId>org.mortbay.jetty</groupId>
        <version>8.1.9.v20130131</version> -->
        <groupId>org.eclipse.jetty</groupId>
        <version>9.0.0.RC0</version>
        <artifactId>jetty-maven-plugin</artifactId>
        <configuration>
          <webAppConfig>
            <jettyEnvXml>src/test/resources/jetty-ds-dev.xml</jettyEnvXml>
          </webAppConfig>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <dependencies>
    <dependency>
      <groupId>org.hsqldb</groupId>
      <artifactId>hsqldb</artifactId>
      <version>2.2.9</version>
    </dependency>
  </dependencies>
</project>

src/test/resources/jetty-ds-dev.xml:

<?xml version="1.0"?>
<Configure id="Server" class="org.eclipse.jetty.webapp.WebAppContext">
  <New id="DSTest" class="org.eclipse.jetty.plus.jndi.Resource">
    <Arg>jdbc/test</Arg>
    <Arg>
      <New class="org.hsqldb.jdbc.JDBCDataSource">
        <Set name="DatabaseName">mem:foo</Set>
        <Set name="User">SA</Set>
      </New>
    </Arg>
  </New>
</Configure>

和实际错误:

2013-02-20 10:22:23.464:WARN:oejx.XmlConfiguration:main: Config error at <New id="DSTest" class="org.eclipse.jetty.plus.jndi.Resource">|??<Arg>jdbc/test</Arg>|??<Arg>|???<New class="org.hsqldb.jdbc.JD
BCDataSource">|????<Set name="DatabaseName">mem:foo</Set>|????<Set name="User">SA</Set>|???</New>|??</Arg>|?</New> java.lang.IllegalStateException: No suitable constructor: <New id="DSTest" class="org
.eclipse.jetty.plus.jndi.Resource">
                <Arg>jdbc/test</Arg>
                <Arg>
                        <New class="org.hsqldb.jdbc.JDBCDataSource">
                                <Set name="DatabaseName">mem:foo</Set>
                                <Set name="User">SA</Set>
                        </New>
                </Arg>

将注释向下更改两行(以恢复 Jetty 8),应用程序将正确启动。

4

1 回答 1

7

您需要在 jetty-ds-dev.xml 文件中的以下行作为第二行:

<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">

不知道为什么它在没有指定 configure.dtd 的情况下与 8 一起工作,但肯定应该在那里,并且版本 9_0。

问候简

于 2013-02-20T22:14:48.257 回答