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

时间:2018-09-17 07:29:41

标签: java rest cxf tomee

我使用apache-cxf和johnzon provider创建了用于JSON编组和解组的Web服务,并且还在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 个答案:

答案 0 :(得分:0)

这似乎是json转换器问题-您的代码正在使用Apache Johnzon将Java对象转换为Json,该对象位于容器中,而不位于部署存档中。您可以尝试更改json提供程序以使用jettison或jackson-jaxb添加库(如果使用maven添加依赖项:

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

或者尝试强制将其从Web应用程序加载,请在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>