0

組み込みの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バージョンに問題があるか、テストのセットアップ方法に問題があると思います。

4

1 に答える 1

0

クライアントが HTTP 経由でファイルの完全なサーバー パスを送信することを期待していますか? これはまさに起こっていることです。HTTP POST ボディでエンコードされたフォーム パラメータsignatureは、 class のオブジェクトを構築するための単一の引数として使用されますFile。もちろん、ファイルは見つかりません。

代わりに使用Stringして、JAX-RS リソース内にサーバー固有のファイル パスを作成します。

于 2013-01-30T13:08:16.993 に答える