0

我正在使用嵌入式 openejb 运行一组 jax-rs 服务的集成测试。其中之一需要接收二进制文件。看下面的方法:

@POST
@Path("signOff")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public void signOffDeliveries(
    @Encoded @FormParam("signature") File signature) {

}

现在,此方法在 Websphere 上运行良好,但对嵌入式 openejb 运行测试失败。获取一个包含整个图像二进制数据的signature文件名(很多乱码)。

现在阅读这个文件给出了一个FileNotFoundException,正如预期的那样。那么我的问题是,这是嵌入式 openejb 中的错误,还是我以错误的方式设置测试?顺便说一句,这是测试代码:

@RunWith(ApplicationComposer.class)
public class DeliveryServiceIT {

    private HttpClient httpClient;
    private DeliveryServiceClient client;

    @Configuration
    public Properties config() throws Exception {
        Properties properties = new Properties();
        properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.RemoteInitialContextFactory");
        properties.setProperty(OpenEjbContainer.OPENEJB_EMBEDDED_REMOTABLE, "true");
        return properties;
    }

    @MockInjector
    public Class<?> mockitoInjector() {
        return MockitoInjector.class;
    }

    @Module
    public EjbModule createModule() throws Exception {
        EjbJar ejbJar = new EjbJar();
        ejbJar.addEnterpriseBean(new StatelessBean(DeliveryService.class));
        EjbModule module = new EjbModule(ejbJar);
        return module;
    }

    @Before
    public void setup() {
        //this is where I create the http client that makes the actual http request
    }

    @Test
    public void signOffDeliveries_givenSignatureImageAndDeliveries_expectsValidRequest() throws FileNotFoundException, IOException {
        File f = new File("/signature.png");

        client.signOffDeliveries(file);
        //the client will take the file, get the bytes, create 
        //multipart/form-data request and send the request to the 
        //service method posted above
    }

由于这适用于我的 websphere,我认为它要么是我在(4.5.0)中运行我的集成测试的 openejb 版本的问题,要么是测试的设置方式存在问题。

4

1 回答 1

0

您希望您的客户通过 HTTP 发送文件完整的服务器路径吗?这正是正在发生的事情。在 HTTP POST 正文中编码的表单参数signature用作构造类对象的单个参数File。当然找不到该文件。

改用String并在您的 JAX-RS 资源中构建特定于服务器的文件路径。

于 2013-01-30T13:08:16.993 回答