我正在使用嵌入式 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 版本的问题,要么是测试的设置方式存在问题。