使用 JBoss 保险丝启动捆绑包时出现 BeanCreationException
BeanCreationException when starting bundle using JBoss Fuse
我创建了 maven 项目来将 rest web 服务暴露给 jboss fuse:
pom.xml:
<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>com.javainuse</groupId>
<artifactId>apache-camel-jaxrs</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-core</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-cxf</artifactId>
<version>2.12.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<version>2.4.0</version>
</plugin>
</plugins>
</build>
applicationContext.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:jaxrs="http://cxf.apache.org/jaxrs" xmlns:camel="http://camel.apache.org/schema/spring"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
http://cxf.apache.org/transports/http/configuration http://cxf.apache.org/schemas/configuration/http-conf.xsd
http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
<jaxrs:server id="restService" address="http://localhost:9000/employeeservice">
<jaxrs:serviceBeans>
<ref bean="employeeService" />
</jaxrs:serviceBeans>
</jaxrs:server>
<bean id="employeeService" class="com.javainuse.beans.EmployeeServiceResource" />
EmployeeServiceResource.java
package com.javainuse.beans;
@Path("/")
public class EmployeeServiceResource {
public EmployeeServiceResource() {
}
@GET
@Path("/employees/{name}/")
public String getCustomer(@PathParam("name") String name) {
return "Welcome " + name;
}
}
JBoss 熔断命令:
JBossFuse:karaf@root>安装mvn:com.javainuse/apache-camel-jaxrs/0.0.1-SNAPSHOT
捆绑包 ID:333
JBossFuse:karaf@root> START 333 -> 给我这个异常:
org.springframework.beans.factory.BeanCreationException:创建名称为 'restService' 的 bean 时出错:bean 初始化失败;嵌套异常是 java.lang.NullPointerException
我正在使用 JBoss Fuse 6.3 和 java 1.8
您的 Maven POM 需要指定 bundle
作为打包类型:
<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>com.javainuse</groupId>
<artifactId>apache-camel-jaxrs</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>bundle</packaging>
...
</project>
我还注意到 jaxrs:server address="http://localhost:9000/employeeservice,这意味着你使用独立的 jetty 端口 9000。但是,当你部署到 FUSE 容器中时(Karaf/OSGi 基于),最佳实践是使用容器管理的 servlet 传输(默认端口 8181),因此请改用相对地址,
address="/employeeservice"
然后您可以通过 http://localhost:8181/cxf/employeeservice
访问端点
弗里曼
我创建了 maven 项目来将 rest web 服务暴露给 jboss fuse:
pom.xml:
<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>com.javainuse</groupId>
<artifactId>apache-camel-jaxrs</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-core</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-cxf</artifactId>
<version>2.12.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<version>2.4.0</version>
</plugin>
</plugins>
</build>
applicationContext.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:jaxrs="http://cxf.apache.org/jaxrs" xmlns:camel="http://camel.apache.org/schema/spring"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
http://cxf.apache.org/transports/http/configuration http://cxf.apache.org/schemas/configuration/http-conf.xsd
http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
<jaxrs:server id="restService" address="http://localhost:9000/employeeservice">
<jaxrs:serviceBeans>
<ref bean="employeeService" />
</jaxrs:serviceBeans>
</jaxrs:server>
<bean id="employeeService" class="com.javainuse.beans.EmployeeServiceResource" />
EmployeeServiceResource.java
package com.javainuse.beans;
@Path("/")
public class EmployeeServiceResource {
public EmployeeServiceResource() {
}
@GET
@Path("/employees/{name}/")
public String getCustomer(@PathParam("name") String name) {
return "Welcome " + name;
}
}
JBoss 熔断命令:
JBossFuse:karaf@root>安装mvn:com.javainuse/apache-camel-jaxrs/0.0.1-SNAPSHOT
捆绑包 ID:333
JBossFuse:karaf@root> START 333 -> 给我这个异常: org.springframework.beans.factory.BeanCreationException:创建名称为 'restService' 的 bean 时出错:bean 初始化失败;嵌套异常是 java.lang.NullPointerException
我正在使用 JBoss Fuse 6.3 和 java 1.8
您的 Maven POM 需要指定 bundle
作为打包类型:
<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>com.javainuse</groupId>
<artifactId>apache-camel-jaxrs</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>bundle</packaging>
...
</project>
我还注意到 jaxrs:server address="http://localhost:9000/employeeservice,这意味着你使用独立的 jetty 端口 9000。但是,当你部署到 FUSE 容器中时(Karaf/OSGi 基于),最佳实践是使用容器管理的 servlet 传输(默认端口 8181),因此请改用相对地址,
address="/employeeservice"
然后您可以通过 http://localhost:8181/cxf/employeeservice
弗里曼