在 openfire 插件中编写自定义 Rest API

Posted

技术标签:

【中文标题】在 openfire 插件中编写自定义 Rest API【英文标题】:Write a custom Rest API in openfire plugin 【发布时间】:2018-01-22 13:20:40 【问题描述】:

我已经完成了以下步骤,在 openfire 服务器中编写了我自己的自定义 rest api。

public class JerseyWrapper extends ServletContainer 

    private static final long serialVersionUID = 4807992231163442643L;

    /** The Constant RESOURCE_CONFIG_CLASS_KEY. */
    private static final String RESOURCE_CONFIG_CLASS_KEY = "com.sun.jersey.config.property.resourceConfigClass";

    /** The Constant RESOURCE_CONFIG_CLASS. */
    private static final String RESOURCE_CONFIG_CLASS = "com.sun.jersey.api.core.PackagesResourceConfig";

    /** The config. */
    private static Map<String, Object> config;

    /** The prc. */
    private static PackagesResourceConfig prc;

    static 
        config = new HashMap<String, Object>();
        config.put(RESOURCE_CONFIG_CLASS_KEY, RESOURCE_CONFIG_CLASS);
        config.put("com.sun.jersey.api.json.POJOMappingFeature", true);
        prc = new PackagesResourceConfig(JerseyWrapper.class.getPackage().getName());
        prc.setPropertiesAndFeatures(config);
        prc.getClasses().add(ContactManagementController.class);
    

    /**
     * Instantiates a new jersey wrapper.
     */
    public JerseyWrapper() 
        super(prc);
    

    @Override
    public void init(ServletConfig servletConfig) throws ServletException 
        super.init(servletConfig);
    

    @Override
    public void destroy() 
        super.destroy();
    



@Path("restapi/v1/de/temp")
public class ContactManagementController 

    private final Logger LOGGER = LoggerFactory.getLogger(ContactManagementController.class);

    @GET
    @Produces( MediaType.APPLICATION_JSON )
    public void getUsers() 
        LOGGER.info("Plugin called");
    


web-custom.xml 包含以下内容

    <?xml version='1.0' encoding='ISO-8859-1'?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <!-- Servlets -->
    <servlet>
        <servlet-name>JerseyWrapper</servlet-name>
        <servlet-class>plugin.JerseyWrapper</servlet-class>
    </servlet>

    <!-- Servlet mappings -->
    <servlet-mapping>
        <servlet-name>JerseyWrapper</servlet-name>
        <url-pattern>/de/*</url-pattern>
    </servlet-mapping>

</web-app>

现在当我打电话给http://localhost/plugins/restapi/v1/de/temp

我收到 404 错误。

我已经为我的插件以及 Controller 和 web-custom.xml 编写了 JerseyWrapper。

我已将 jar 上传到 openfire 插件,但是当我点击 openfire 服务器时,我得到 404 响应

【问题讨论】:

嗨。我还需要在我的插件中创建一个 rest api,我也得到 404 错误。你解决了这个问题吗?是否有任何文档(mans)描述了如何将rest api添加到插件? @Path("messenger/de/hook") 在路径中添加插件文件夹名即可解决 【参考方案1】:

很难判断出了什么问题。 Openfire 确实提供了实现 REST API 的插件。也许阻力最小的路径是复制这样的插件,删除你不需要的,并添加你做的?

【讨论】:

以上是关于在 openfire 插件中编写自定义 Rest API的主要内容,如果未能解决你的问题,请参考以下文章

使用 openfire 服务器自定义 iq

如何为 Openfire 实现您自己的(自定义)服务器代码

如何处理 grails spring-security-rest 插件中的自定义身份验证异常?

Openfire 将消息退回给发件人

openfire ssl 自定义证书

带有自定义 API Rest Endpoint 的 WordPress 和 JWT