jboss-as-7.1.1.Final:(六)向wildfly-10.1.0.Final迁移

这篇博客介绍了将应用从jboss-as-7.1.1.Final迁移到wildfly-10.1.0.Final的主要步骤,包括首页设置、远程调试、域名绑定、Eclipse集成的自动发布和JSP热加载,以及日志输出配置。主要变化涉及web容器从tomcat到undertow的切换,Web Services由CXF转向JAX-WS。每个部分都详细说明了配置的调整方法。
部署运行你感兴趣的模型镜像

这里只讲前面五篇文章内容在wildfly下的适用问题,服务器及程序的详细迁移项请见官方文档:How do I migrate my application from AS7 to WildFly
对于webapp而言,关联较大的变动有两点:①web容器由tomcat改成了undertow,表现在配置文件当中就是xmlnsurn:jboss:domain:web:1.1subsystem被替换为urn:jboss:domain:undertow:3.1,配置内容也有一些变动;②在Web Services方面废弃了CXF Spring Webservices及JAX-RPC,转而支持Java EE的标准网络服务框架JAX-WS。

一、首页设置

jboss-as-7.1.1.Final:(一)首页设置稍有不同的是,virtual-server标签不复存在,我们只需找到xmlnsurn:jboss:domain:undertow:3.1subsystem标签下对应的server节点,删除其host子节点的如下孙子节点即可:

<location name="/" handler="welcome-content"/>

welcome-content同样定义在该subsystem下:

<handlers>
    <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
</handlers>
二、远程调试设置

jboss-as-7.1.1.Final:(二)远程调试设置不同之处在于我们需要解除注释的该行有了些许变动:JAVA_OPTS="$JAVA_OPTS -agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n"

三、域名绑定资源目录

jboss-as-7.1.1.Final:(三)域名绑定资源目录相比,同一项目下的处理方法相同,而当不同项目时,根据本文第一项所述配置首页:

<subsystem xmlns="urn:jboss:domain:undertow:3.1">
    <buffer-cache name="default"/>
    <server name="default-server">
        <http-listener enable-http2="true" name="default" redirect-socket="https" socket-binding="http"/>
        <https-listener enable-http2="true" name="https" security-realm="ApplicationRealm" socket-binding="https"/>
        <host alias="localhost" name="default-host">
            <filter-ref name="server-header"/>
            <filter-ref name="x-powered-by-header"/>
        </host>
    </server>
    <servlet-container name="default">
        <jsp-config development="true"/>
        <websockets/>
    </servlet-container>
    <handlers>
        <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
    </handlers>
    <filters>
        <response-header header-name="Server" header-value="WildFly/10" name="server-header"/>
        <response-header header-name="X-Powered-By" header-value="Undertow/1" name="x-powered-by-header"/>
    </filters>
</subsystem>

然后在该subsystem下添加如下节点:

<server name="YouthServerA">
    <http-listener enable-http2="true" name="default" redirect-socket="https" socket-binding="http"/>
    <https-listener enable-http2="true" name="https" security-realm="ApplicationRealm" socket-binding="https"/>
    <host alias="domainA.com" name="domainA">
        <filter-ref name="server-header"/>
        <filter-ref name="x-powered-by-header"/>
    </host>
</server>
<server name="YouthServerB">
    <http-listener enable-http2="true" name="default" redirect-socket="https" socket-binding="http"/>
    <https-listener enable-http2="true" name="https" security-realm="ApplicationRealm" socket-binding="https"/>
    <host alias="domainB.com" name="domainB">
        <filter-ref name="server-header"/>
        <filter-ref name="x-powered-by-header"/>
    </host>
</server>

项目ProjectA.warProjectB.warjboss-web.xml文件配置不变。

四、Eclipse集成下的自动发布和JSP的热加载

WildFly 10是JBoss AS 7的当前最新后续版本,二者一脉相承。与jboss-as-7.1.1.Final:(四)Eclipse集成下的自动发布和JSP的热加载相同的是第一项中的自动发布设置;不同的是:在配置文件中找到xmlnsurn:jboss:domain:undertow:3.1subsystem的如下节点:

<servlet-container name="default">
    <jsp-config/>
    <websockets/>
</servlet-container>

其中的jsp-config标签修改为:

<jsp-config development="true"/>

即可,不需要再修改源码了。

五、日志输出配置

原文见jboss-as-7.1.1.Final:(五)日志输出配置
WildFly开启访问日志的方法和JBoss AS 7类似,只不过二者使用的容器不相同,而且WildFly中必须指定log的存放目录,我们从standalone.xml中找到xmlnsurn:jboss:domain:undertow:3.1subsystem节点下对应的主机:

<server name="default-server">
    <http-listener enable-http2="true" name="default" redirect-socket="https" socket-binding="http"/>
    <https-listener enable-http2="true" name="https" security-realm="ApplicationRealm" socket-binding="https"/>
    <host alias="localhost" name="default-host">
        <filter-ref name="server-header"/>
        <filter-ref name="x-powered-by-header"/>
    </host>
</server>

在该主机下追加access-log标签:

<access-log pattern="common" directory="${jboss.home.dir}/standalone/log" prefix="access" />

WildFly的日志子系统变化不大,新增了可以把日志的格式化器提取出来复用的标签:

<formatter name="PATTERN">
    <pattern-formatter pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%t] [%c] %s%e%n"/>
</formatter>

从而容器定义控制台处理器①变为:

<console-handler name="SERVER_CONSOLE">
    <level name="TRACE"/>
    <encoding value="UTF-8"/>
    <formatter>
        <named-formatter name="COLOR-PATTERN"/>
    </formatter>
    <target name="System.out"/>
</console-handler>

您可能感兴趣的与本文相关的镜像

Linly-Talker

Linly-Talker

AI应用

Linly-Talker是一款创新的数字人对话系统,它融合了最新的人工智能技术,包括大型语言模型(LLM)、自动语音识别(ASR)、文本到语音转换(TTS)和语音克隆技术

2025-05-27 17:29:45.743 ERROR 15325 --- [nio-8810-exec-4] [] [] org.jboss.resteasy.resteasy_jaxrs.i18n : RESTEASY002010: Failed to execute javax.ws.rs.NotSupportedException: RESTEASY003200: Could not find message body reader for type: class com.spotter.dtg.aetherflow.admin.adapter.web.request.liteChain.LiteUpdateFlowReq of content type: text/plain;charset=UTF-8 at org.jboss.resteasy.core.interception.ServerReaderInterceptorContext.throwReaderNotFound(ServerReaderInterceptorContext.java:53) ~[resteasy-jaxrs-3.12.1.Final.jar:3.12.1.Final] at org.jboss.resteasy.core.interception.AbstractReaderInterceptorContext.getReader(AbstractReaderInterceptorContext.java:80) ~[resteasy-jaxrs-3.12.1.Final.jar:3.12.1.Final] at org.jboss.resteasy.core.interception.AbstractReaderInterceptorContext.proceed(AbstractReaderInterceptorContext.java:53) ~[resteasy-jaxrs-3.12.1.Final.jar:3.12.1.Final] at org.jboss.resteasy.core.MessageBodyParameterInjector.inject(MessageBodyParameterInjector.java:198) ~[resteasy-jaxrs-3.12.1.Final.jar:3.12.1.Final] at org.jboss.resteasy.core.MethodInjectorImpl.injectArguments(MethodInjectorImpl.java:91) ~[resteasy-jaxrs-3.12.1.Final.jar:3.12.1.Final] at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:113) ~[resteasy-jaxrs-3.12.1.Final.jar:3.12.1.Final] at org.jboss.resteasy.core.ResourceMethodInvoker.internalInvokeOnTarget(ResourceMethodInvoker.java:543) ~[resteasy-jaxrs-3.12.1.Final.jar:3.12.1.Final] at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTargetAfterFilter(ResourceMethodInvoker.java:432) ~[resteasy-jaxrs-3.12.1.Final.jar:3.12.1.Final] at org.jboss.resteasy.core.ResourceMethodInvoker.lambda$invokeOnTarget$0(ResourceMethodInvoker.java:393) ~[resteasy-jaxrs-3.12.1.Final.jar:3.12.1.Final] at org.jboss.resteasy.core.interception.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:358) ~[resteasy-jaxrs-3.12.1.Final.jar:3.12.1.Final] at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:395) ~[resteasy-jaxrs-3.12.1.Final.jar:3.12.1.Final] at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:364) ~[resteasy-jaxrs-3.12.1.Final.jar:3.12.1.Final] at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:337) ~[resteasy-jaxrs-3.12.1.Final.jar:3.12.1.Final] at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:440) [resteasy-jaxrs-3.12.1.Final.jar:3.12.1.Final] at org.jboss.resteasy.core.SynchronousDispatcher.lambda$invoke$4(SynchronousDispatcher.java:229) [resteasy-jaxrs-3.12.1.Final.jar:3.12.1.Final] at org.jboss.resteasy.core.SynchronousDispatcher.lambda$preprocess$0(SynchronousDispatcher.java:135) [resteasy-jaxrs-3.12.1.Final.jar:3.12.1.Final] at org.jboss.resteasy.core.interception.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:358) ~[resteasy-jaxrs-3.12.1.Final.jar:3.12.1.Final] at org.jboss.resteasy.core.SynchronousDispatcher.preprocess(SynchronousDispatcher.java:138) [resteasy-jaxrs-3.12.1.Final.jar:3.12.1.Final] at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:215) [resteasy-jaxrs-3.12.1.Final.jar:3.12.1.Final] at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:245) ~[resteasy-jaxrs-3.12.1.Final.jar:3.12.1.Final] at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:61) ~[resteasy-jaxrs-3.12.1.Final.jar:3.12.1.Final] at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56) ~[resteasy-jaxrs-3.12.1.Final.jar:3.12.1.Final]
最新发布
05-28
<think>嗯,用户遇到了RESTEASY003200错误,无法找到messagebodyreader。这个问题通常是因为服务端无法解析客户端发送的Content-Type。首先,我需要回忆一下RESTEasy的相关知识。当客户端发送的请求体格式与服务器期望的不匹配时,比如Content-Type是text/plain但服务器期望的是JSON,就会抛出这个异常。用户提供的错误信息显示Content-Type是text/plain;charset=UTF-8,而目标类可能是LiteUpdateFlowReq,这说明客户端发送的数据格式是纯文本,但服务器可能需要JSON或其他格式。我需要检查客户端的请求头是否正确设置,确保Content-Type与服务器端注解一致,比如@Consumes(MediaType.APPLICATION_JSON)。另外,用户之前提到的引用[1]中,解决方法是通过Postman修改请求头配置,这可能适用当前情况。同时,引用[3]中的SpringMVC文件上传例子,虽然不直接相关,但说明正确使用注解的重要性,比如@RequestPart。接下来,可能的解决方案包括:检查客户端请求的Content-Type是否正确,确保服务器端有对应的消息体读取器,比如添加JSON解析依赖如Jackson。如果客户端无法更改Content-Type,可能需要自定义MessageBodyReader来处理text/plain类型,或者调整服务器端的注解。还需要考虑依赖冲突,比如引用[2]提到的AbstractMethodError,可能是版本不兼容导致,检查JAX-RS和RESTEasy的版本是否匹配。此外,注册Jackson的提供者或在web.xml中配置相关上下文参数也可能解决问题。 总结步骤:1.检查并修正客户端的Content-Type;2.确保服务器端依赖正确;3.添加必要的注解;4.自定义读取器或调整配置。同时,需要验证这些步骤是否覆盖了所有可能的原因,比如依赖缺失或版本问题。</think>针对RESTEASY003200错误(无法找到匹配的Message Body Reader),以下是分步解决方案: ### 一、问题根源分析 该错误表明RESTEasy无法将请求体转换为目标类型$LiteUpdateFlowReq$,常见原因包括: 1. 请求头`Content-Type`与服务端注解不匹配[^1] 2. 缺少必要的JSON序列化依赖(如Jackson) 3. 自定义类型未注册消息转换器 4. JAX-RS版本冲突导致接口实现缺失[^2] ### 二、解决方案步骤 1. **检查客户端请求头配置** ```http POST /api/endpoint HTTP/1.1 Content-Type: application/json;charset=UTF-8 # 必须与服务端@Consumes一致 ``` *使用Postman时需在Headers中显式设置* 2. **添加JSON处理依赖(Maven示例)** ```xml <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-jackson2-provider</artifactId> <version>3.15.1.Final</version> </dependency> ``` 3. **验证服务端注解配置** ```java @POST @Path("/update") @Consumes(MediaType.APPLICATION_JSON) // 必须与客户端Content-Type匹配 @Produces(MediaType.APPLICATION_JSON) public Response updateFlow(LiteUpdateFlowReq request) {...} ``` 4. **注册Jackson提供者(若使用Spring Boot)** ```java @Bean public JacksonJsonProvider jacksonJsonProvider() { return new JacksonJsonProvider(); } ``` 5. **检查JAX-RS版本兼容性** ```xml <!-- 确保jaxrs-api版本不低于2.1 --> <dependency> <groupId>javax.ws.rs</groupId> <artifactId>javax.ws.rs-api</artifactId> <version>2.1.1</version> </dependency> ``` ### 三、高级调试方法 1. **自定义MessageBodyReader(仅限特殊需求)** ```java @Provider @Consumes("text/plain") public class TextToLiteUpdateReader implements MessageBodyReader<LiteUpdateFlowReq> { // 实现readFrom方法进行自定义转换 } ``` 2. **启用RESTEasy调试日志** ```xml <logger name="org.jboss.resteasy" level="DEBUG"/> ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值