Java webTarget.request返回builder.method不可接受的类型

Java webTarget.request返回builder.method不可接受的类型,java,eclipse,rest,unit-testing,jersey,Java,Eclipse,Rest,Unit Testing,Jersey,我正在尝试对API REST函数进行单元测试 builder = webTarget.request(); 返回该类型的生成器 javax.ws.rs.client.Invocation.Builder 但如果我使用该生成器并在其上调用builder.method(“POST”,entity),则调用的方法看起来是这样的: public Response method(final String name, final Entity<?> entity) throw

我正在尝试对API REST函数进行单元测试

    builder = webTarget.request();
返回该类型的生成器

javax.ws.rs.client.Invocation.Builder
但如果我使用该生成器并在其上调用builder.method(“POST”,entity),则调用的方法看起来是这样的:

    public Response method(final String name, final Entity<?> entity) throws ProcessingException {
        requestContext.setMethod(name);
        storeEntity(entity);
        return new JerseyInvocation(this).invoke();
    }
在那条线上跑失败了


我看着它,觉得自己疯了:怎么可能,函数被作为一个类的成员调用,但当在该方法中使用“this”时,使用的是完全不同的类?

调用
和调用
调用.Builder
都是接口。
WebTarget.request()
契约将返回
Invocation.Builder
。这些都是我们在这里讨论的接口
WebTarget
Invocation
Invocation.Builder
。这是JAX-RS规范的合同设计。由JAX-RS实现来实现这些接口。Jersey实现分别是
JerseyWebTarget
JerseyInvocation
、和
JerseyInvocation.Builder

如果我创造了这样的东西也是一样的

public interface Model {}

public interface Service {
    Model getModel();
}

public ModelImpl implements Model {}

public class ServiceImpl implements Service {
    @Override
    public Model getModel() {
        return new ModelImpl();
    }
}

这里没什么特别的事。
服务
合同规定
getModel()
方法返回一个
模型
,这是一个接口,实际返回值的类型为
ModelImpl
,即实现。多态性正在发挥作用。

因此,我应该将'builder'声明为JerseyInvocation.builder,然后该builder.method将起作用吗?不,
Invocation.builder
可以。没有理由不起作用。这是基本的Java内容。和泽西没什么特别的关系。你有什么错误吗?我不确定你的问题到底是什么。
public interface Model {}

public interface Service {
    Model getModel();
}

public ModelImpl implements Model {}

public class ServiceImpl implements Service {
    @Override
    public Model getModel() {
        return new ModelImpl();
    }
}