servicecomb-java-chassis icon indicating copy to clipboard operation
servicecomb-java-chassis copied to clipboard

调用RPC接口报错:java.lang.IllegalStateException: parameter name is not present,但是<compilerArgument>-parameters</compilerArgument>已经添加

Open yyy2535 opened this issue 2 years ago • 5 comments

接口定义在单独的组件A中,已添加<compilerArgument>-parameters</compilerArgument>编译 服务 B 实现了该接口定义,部署注册成功,cse已正常显示生成的对应契约,参数名称也为定义好的名称 服务 C 在调用此接口时报错java.lang.IllegalStateException: parameter name is not present,但是另一个服务 D 在调用此接口时能够正常调用成功

是什么原因导致了这种情况~

yyy2535 avatar Jun 29 '22 08:06 yyy2535

请问是必现吗,可否提供一个简单的重现例子,步骤?

zhaozw avatar Jul 01 '22 08:07 zhaozw

不是必现的~ 一般出现在自身服务重启,或者接口提供方重启的时候,并且问题出现后不会自动恢复

再补充一下上面问题的描述: 目前只有服务 C 加载服务 B 契约的时候,会出现标题中的问题;服务 C 在调用其他服务的接口时,没有出现这个问题~

补充使用版本:2.6.1

yyy2535 avatar Jul 01 '22 08:07 yyy2535

你是用的@RpcSchema还是@RestSchema?之前有同事用错注解会有这种情况,但他好像是必现,所以如果能贴出个简单的demo,可能会更利于我们重现这个问题

zhaozw avatar Jul 04 '22 01:07 zhaozw

使用的@RpcSchema注解

组件A接口定义

public interface BService {
    boolean specificMethod(String specificParamName);
}

微服务B接口实现

@RpcSchema(schemaId = "BService")
public class BSerivceImpl implements BService {
    @Override
    public boolean specificMethod(String specificParamName) {
        ...
        return true;
    }
}

微服务C、D注入

    @RpcReference(microserviceName = "B", schemaId = "BService")
    private BService bService;

yyy2535 avatar Jul 04 '22 02:07 yyy2535

您好,错误栈信息再贴一下,谢谢! 问题出现后不会自动恢复,是指出现问题之后只能重启吗? 通过如下方式加的-parameters,并且是ABCD都应用到这个配置了?

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>${maven-compiler-plugin.version}</version>
          <configuration>
            <compilerArgument>-parameters</compilerArgument>

然后试试在参数那里加上如下注解试试,看看能不能解决 @RequestParam("specificParamName")

zhaozw avatar Jul 05 '22 06:07 zhaozw