0

Java プロジェクトで RESTful アプリケーションを使用しています。通常、単体テスト クラスでは、次のようなメソッドを使用します。

public Employee getEmployeeByEmail(String email) {
    ClientResponse clientResponse = webResource.path(beginPath + "getByEmail/" + email).get(
            ClientResponse.class);

    Employee employee = null;
    if (200 == clientResponse.getStatus()) {
        employee = clientResponse.getEntity(Employee.class);
    }

    return employee;
}

...しかし、ほぼ12の異なるクラスで同様のメソッドを使用する必要があります。これは私がやろうと決めたことです:

public class TestManager<T> {

private WebResource webResource;
private String beginPath;
private Class<T> clazz;

public TestManager(WebResource webResource, String beginPath, Class<T> clazz) {
    this.webResource = webResource;
    this.beginPath = beginPath;
    this.clazz = clazz;
}

public boolean objectExists(String methodPath, String uniqueFieldName, String uniqueField) {
    boolean check = false;
    ClientResponse clientResponse = webResource.path(beginPath + methodPath + "/" + uniqueField).get(
                ClientResponse.class);
    JSONObject jsonObject = clientResponse.getEntity(JSONObject.class);

    if (200 == clientResponse.getStatus() && !jsonObject.isNull(uniqueFieldName)) {
        check = true;
    }

    return check;
}

public T getObjectById(String methodPath, long id) {
    ClientResponse clientResponse = webResource.path(beginPath + methodPath + "/" + id).get(
            ClientResponse.class);
    T object = null;
    if (200 == clientResponse.getStatus() && !clientResponse.getEntity(JSONObject.class).isNull("id")) {
        object = clientResponse.getEntity(clazz);
    }

    return object;
}

}

objectExists() メソッドは問題なく動作しますが、getObjectById() メソッドはスタック トレースを生成します。

javax.ws.rs.WebApplicationException: javax.xml.bind.UnmarshalException: Error creating JSON-based XMLStreamReader - with linked exception:[javax.xml.stream.XMLStreamException: java.io.IOException: stream is closed]

私はこれを行うことができないようです:

object = clientResponse.getEntity(clazz);

しかし、私はそれを修正する方法がわかりません。私の英語でごめんなさい:P

編集:ジャージを使用しています

Edit2: 解決策:問題は、getEntity()メソッドを2回使用したことです...一度だけ使用すると...動作します...いまいましい

4

2 に答える 2

0

GET 呼び出しです。ブラウザから呼び出してみてください。

それでも同じエラーが発生する場合は、クライアントに問題はありません。

于 2012-06-07T11:26:21.267 に答える
0

単体テストだけで問題が発生している場合は、Jersey Test Framework を参照してください。ジャージのドキュメントへのリンクを次に示します。Google からさらにチュートリアルを参照できます。

于 2012-06-07T13:35:38.550 に答える