当前位置: 首页 > 知识库问答 >
问题:

在tomee服务器中重新部署apache cxf web服务后出现问题

邵宏达
2023-03-14

我使用apache-cxf创建了web服务,并使用johnzon provider来编组和解组JSON,还在open-ejb-jar文件中配置了provider-service。一旦我在tomee服务器中部署了应用程序,我就可以访问我的api,但是在我的应用程序被取消部署和再次部署之后。我无法使用http://localhost:8080/demo/school-services/student/1访问我的api

我正处于错误之下。

<ns1:XMLFault xmlns:ns1="http://cxf.apache.org/bindings/xformat"><ns1:faultstring xmlns:ns1="http://cxf.apache.org/bindings/xformat">java.lang.NoClassDefFoundError: org/apache/johnzon/mapper/ac`enter code here`cess/FieldAndMethodAccessMode$CompositeReader</ns1:faultstring></ns1:XMLFault>

下面是我的配置文件openejb-jar。xml文件

<openejb-jar>
        <pojo-deployment class-name="jaxrs-application">
            <properties>
                # optional but requires to skip scanned providers if set to true 
                cxf.jaxrs.skip-provider-scanning = true 
                 cxf.jaxrs.providers = johnzon,org.apache.openejb.server.cxf.rs.EJBAccessExceptionMapper 
            </properties>
        </pojo-deployment>
    </openejb-jar>
        resources.xml file 


<resources>

        <Service id="johnzon" class-name="org.apache.johnzon.jaxrs.ConfigurableJohnzonProvider">
        # 1M 
        maxSize = 1048576 
        bufferSize = 1048576 
        # Additional types to ignore 
        ignores = org.apache.cxf.jaxrs.ext.multipart.MultipartBody 
      </Service>
    </resources>

请查看随附的演示应用程序git repo:https://github.com/dharmendrasahu08/spring_boot_application/tree/master/demo你能帮我解决这个问题吗。谢谢,D Sahu

共有1个答案

法浩壤
2023-03-14

看起来像是json转换器的问题——您的代码正在使用Apache Johnzon将Java对象转换为Json,它在容器中,而不在部署档案中。如果使用maven添加依赖项,您可以尝试将json提供者更改为使用spougle,或者使用jackson-jaxb添加库:

org.codehaus.jettison:jettison:x.y.z

或者尝试强制从webapp加载项conf/system.properties加载:

openejb.forced-load=org.apache.cxf.jaxrs.provider.json.JSONProvider 

试试换openejb-jar.xml

<?xml version="1.0" encoding="UTF-8"?> 
 <openejb-jar xmlns="http://www.openejb.org/openejb-jar/1.1" 
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xsi:schemaLocation="http://www.openejb.org/openejb-jar/1.1"> 
     <pojo-deployment  class-name="jaxrs-application"> 
         <properties> 
             cxf.jaxrs.providers =  org.apache.cxf.jaxrs.provider.json.JSONProvider 
         </properties> 
     </pojo-deployment> 
 </openejb-jar> 
 类似资料:
  • 关于aiohttp服务器部署,这里有以下几种选择: 独立的服务器。 使用nginx, HAProxy等反向代理服务器,之后是后端服务器。 在反向代理之后在部署一层gunicorn,然后才是后端服务器。 独立服务器 只需要调用aiohttp.web.run_app(),并传递aiohttp.web.Application实例即可。 该方法最简单,也是在比较小的程序中最好的解决方法。但该方法并不能完全

  • 我正在尝试在库伯内特斯集群的pod中部署DHCP服务器。我创建了以下资源: $cat dhcpd部署。亚马尔 创建dhcpd-deployment.yaml $catdhcpd-service.yaml $kubectl create-f dhcpd服务。亚马尔 pod和服务的所有内容都已成功创建,但不幸的是,DHCPD pod在UDP端口67上没有接收任何数据包。 我错过什么了吗?

  • 部署 PHP 应用程序到生产环境中有多种方式。 Platform as a Service (PaaS) PaaS 提供了运行 PHP 应用程序所必须的系统环境和网络架构。这就意味着只需做少量配置就可以运行 PHP 应用程序或者 PHP 框架。 现在,PaaS 已经成为一种部署、托管和扩展各种规模的 PHP 应用程序的流行方式。你可以在 资源部分 查看 PHP PaaS “Platform as

  • 部署服务 我们使用 docker service 命令来管理 Swarm 集群中的服务,该命令只能在管理节点运行。 新建服务 现在我们在上一节创建的 Swarm 集群中运行一个名为 nginx 服务。 $ docker service create --replicas 3 -p 80:80 --name nginx nginx:1.13.7-alpine 现在我们使用浏览器,输入任意节点 IP

  • 我有一个本地eureka服务器和一个客户端 RetryableEurekaHttpClient:请求执行失败DiscoveryClient:DiscoveryClient_MW/192.168.0.100:Client:8080-无法发送心跳! com.netflix.discovery.shared.transport.transportException:无法在任何已知服务器上执行请求 在《原

  • 本文档用来说明通过预编译好的安装包来安装并运行基于 MySQL/MariaDB 的 Seafile 服务器。(MariaDB 是 MySQL 的分支) 下载 到下载页面下载最新的服务器安装包. 部署和目录设计 假设你公司的名称为 haiwen, 你也已经下载 seafile-server_1.4.0_* 到你的 home 目录下。 我们建议这样的目录结构: mkdir haiwen mv seaf