組み込みのopenejbを使用してjax-rsサービスの一連の統合テストを実行しています。これらの1つは、バイナリファイルを受信する必要があります。以下の方法を参照してください。
@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バージョンに問題があるか、テストのセットアップ方法に問題があると思います。