项目 cxf 安装在 JBoss Fuse 但仍然 "no services have been found"

project cxf installed on JBoss Fuse but still "no services have been found"

我正在尝试学习如何使用 cxf 和 JBoss Fuse 制作 REST 服务。在服务器上成功安装服务后,我尝试在 http://localhost:8181/cxf 上查看已安装的 cxf 服务列表,得到表达式 "No services have been found"。有人知道为什么没有服务没有出现,我该如何显示? 我用作测试的代码是本教程 https://www.tutorialspoint.com/jboss_fuse/jboss_fuse_rest_web_services.htm 中的代码,从 Maven 项目 org.apache.cxf cxf-http-basic

开始

编辑 1:在遵循 Abolfazl 的有用重写指南后,我安装并重新启动了该服务。 这次做 osgi:list 我得到

[ 320] [Active     ] [Failure     ] [       ] [   80] mvn:com.tuts.abhinav/rest-service/1.0-SNAPSHOT

在做 log:display 时我得到

2017-05-23 09:44:36,969 | ERROR | l Console Thread | BlueprintContainerImpl           | 23 - org.apache.aries.blueprint.core - 1.4.5 | Unable to start blueprint container for bundle null/0.0.0
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at java.util.ArrayList.rangeCheck(ArrayList.java:653)[:1.8.0_121]
    at java.util.ArrayList.get(ArrayList.java:429)[:1.8.0_121]
    at org.apache.aries.blueprint.container.BlueprintContainerImpl.readDirectives(BlueprintContainerImpl.java:214)
    at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:296)
    at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:270)
    at org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:294)
    at org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:263)
    at org.apache.aries.blueprint.container.BlueprintExtender.modifiedBundle(BlueprintExtender.java:253)
    at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.customizerModified(BundleHookBundleTracker.java:500)
    at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.customizerModified(BundleHookBundleTracker.java:433)
    at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$AbstractTracked.track(BundleHookBundleTracker.java:725)
    at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.bundleChanged(BundleHookBundleTracker.java:463)
    at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$BundleEventHook.event(BundleHookBundleTracker.java:422)
    at org.apache.felix.framework.util.SecureAction.invokeBundleEventHook(SecureAction.java:1127)
    at org.apache.felix.framework.util.EventDispatcher.createWhitelistFromHooks(EventDispatcher.java:696)
    at org.apache.felix.framework.util.EventDispatcher.fireBundleEvent(EventDispatcher.java:484)
    at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4429)
    at org.apache.felix.framework.Felix.startBundle(Felix.java:2100)
    at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:976)
    at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:963)
    at org.apache.karaf.shell.osgi.StartBundle.doExecute(StartBundle.java:37)
    at org.apache.karaf.shell.osgi.BundlesCommand.doExecute(BundlesCommand.java:37)
    at org.apache.karaf.shell.console.OsgiCommandSupport.execute(OsgiCommandSupport.java:38)
    at org.apache.felix.gogo.commands.basic.AbstractCommand.execute(AbstractCommand.java:35)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)[:1.8.0_121]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)[:1.8.0_121]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.8.0_121]
    at java.lang.reflect.Method.invoke(Method.java:498)[:1.8.0_121]
    at org.apache.aries.proxy.impl.ProxyHandler.invoke(ProxyHandler.java:54)[19:org.apache.aries.proxy.impl:1.0.5]
    at org.apache.aries.proxy.impl.ProxyHandler.invoke(ProxyHandler.java:119)[19:org.apache.aries.proxy.impl:1.0.5]
    at org.apache.karaf.shell.console.commands.$BlueprintCommand417451938.execute(Unknown Source)[38:org.apache.karaf.shell.console:2.4.0.redhat-630187]
    at org.apache.felix.gogo.runtime.CommandProxy.execute(CommandProxy.java:78)[38:org.apache.karaf.shell.console:2.4.0.redhat-630187]
    at org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:477)[38:org.apache.karaf.shell.console:2.4.0.redhat-630187]
    at org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:403)[38:org.apache.karaf.shell.console:2.4.0.redhat-630187]
    at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108)[38:org.apache.karaf.shell.console:2.4.0.redhat-630187]
    at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:183)[38:org.apache.karaf.shell.console:2.4.0.redhat-630187]
    at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:120)[38:org.apache.karaf.shell.console:2.4.0.redhat-630187]
    at org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.java:92)[38:org.apache.karaf.shell.console:2.4.0.redhat-630187]
    at org.apache.karaf.shell.console.jline.Console.run(Console.java:197)[38:org.apache.karaf.shell.console:2.4.0.redhat-630187]
    at org.apache.karaf.shell.console.jline.DelayedStarted.run(DelayedStarted.java:79)[38:org.apache.karaf.shell.console:2.4.0.redhat-630187]

也许试试这个来自 Fuse 的 REST 示例?它使用 JBoss 保险丝 6.3:

https://github.com/jboss-fuse/quickstarts/tree/master/cxf/rest

以上示例需要更正如下:

1-在代码最后一行的 "Add Fuse Plugin Repositories" 部分,“”必须替换为

2-在代码第 6 行的 "Add Build Instruction" 部分,"artifalctId" 必须替换为 "artifactId"。

创建和部署上述示例的正确步骤如下:

1-使用以下命令创建一个简单的 Maven 快速启动项目:

mvn archetype:generate -DgroupId=com.tuts.abhinav -DartifactId=rest-service -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

2-更改项目结构,直到您具有以下结构:

3-"UserService.java" class 必须有以下内容:

package com.tuts;

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

@Path("/UserService_1")
public class UserService {
   @GET
   @Path("/get_data")
   @Produces(MediaType.APPLICATION_JSON)

   public String getUser() {
      String reponse = "This is standard response from REST";
      return reponse;
   }
}

4-"blueprint.xml" 文件应包含以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:jaxrs="http://cxf.apache.org/blueprint/jaxrs"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0     http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd    http://cxf.apache.org/blueprint/jaxrs     http://cxf.apache.org/schemas/blueprint/jaxrs.xsd">
    <jaxrs:server address="/users" id="service">
        <jaxrs:serviceBeans>
            <ref component-id="userService"/>
        </jaxrs:serviceBeans>
    </jaxrs:server>
    <bean class="com.tuts.UserService" id="userService"/>
</blueprint>

5-"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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tuts.abhinav</groupId>
<artifactId>rest-service</artifactId>
<packaging>bundle</packaging>
<version>1.0-SNAPSHOT</version>
<name>rest-service</name>
<url>http://maven.apache.org</url>
<dependencies>
    <dependency>
        <groupId>org.apache.servicemix.specs</groupId>
        <artifactId>org.apache.servicemix.specs.jsr311-api-1.1.1</artifactId>
        <version>1.9.0</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.apache.servicemix</groupId>
        <artifactId>servicemix-http</artifactId>
        <version>2013.01</version>
    </dependency>

    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-frontend-jaxrs</artifactId>
        <version>3.0.2</version>
    </dependency>

    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.16</version>
    </dependency>
</dependencies>

<repositories>
    <repository>
        <id>fusesource.m2</id>
        <name>FuseSource Community Release Repository</name>
        <url>http://repo.fusesource.com/nexus/content/repositories/releases</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>

        <releases>
            <enabled>true</enabled>
        </releases>

    </repository>

    <repository>
        <id>fusesource.ea</id>
        <name>FuseSource Community Early Access Release Repository</name>
        <url>http://repo.fusesource.com/nexus/content/groups/ea</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
        <releases>
            <enabled>true</enabled>
        </releases>
    </repository>

</repositories>

<pluginRepositories>
    <pluginRepository>
        <id>fusesource.m2</id>
        <name>FuseSource Community Release Repository</name>
        <url>http://repo.fusesource.com/nexus/content/repositories/releases</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>

        <releases>
            <enabled>true</enabled>
        </releases>
    </pluginRepository>
</pluginRepositories>
<build>
    <defaultGoal>install</defaultGoal>
    <plugins>
        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <version>2.3.4</version>
            <extensions>true</extensions>

            <configuration>
                <instructions>
                    <Bundle-SymbolicName>rest-example-database-post-method
                    </Bundle-SymbolicName>
                    <Import-Package>* </Import-Package>
                </instructions>
            </configuration>

        </plugin>
    </plugins>
</build>

6-您可以使用以下命令安装项目:

mvn install

7-最后,您可以使用以下命令在 karaf 中部署项目包:

osgi:install -s mvn:com.tuts.abhinav/rest-service/1.0-SNAPSHOT

之后您的服务必须在 http://localhost:8181/cxf url:

可用