使用している try/catch ブロックで奇妙な問題が発生しました。このメソッドは、リモート サービスからデータを取得して保存するだけです。
public WFSGetCapabilitiesResponse wfsGetCapabilities(String url) {
WFSGetCapabilitiesResponse response = new WFSGetCapabilitiesResponse();
try {
WFSDataStore data = loadWFSCapabilities(url);
String[] typeNames = data.getTypeNames();
ArrayList<WFSFeatureTypeBase> wfsLayers = new ArrayList<WFSFeatureTypeBase>();
for (int i = 0; i < typeNames.length; i++) {
String typeName = typeNames[i];
WFSFeatureTypeBase newLayer = new WFSFeatureTypeBase();
newLayer.setTypeName(typeName);
newLayer.setName(typeName.split(":")[1]);
newLayer.setTitle(data.getFeatureTypeTitle(typeName));
newLayer.setAbstract(data.getFeatureTypeAbstract(typeName));
newLayer.setServiceUrl(url.split("\\?")[0]);
wfsLayers.add(newLayer);
}
response.setWFSLayers(wfsLayers);
} catch (IOException e) {
response.setError(WCSCapabilitiesResponse.IO_EXCEPTION);
response.setErrorMessage(e.getMessage());
response.setSuccessful(false);
e.printStackTrace();
return response;
}
return response;
}
このコードを実行すると、null ポインター例外が発生します (「データ」は null ですが、関連性があるかどうかはわかりません)。ただし、catch ブロックから return ステートメントを削除すると、すべて問題ありません。
奇妙なことに、どちらの場合も IOException がキャッチされていないため、なぜこのような影響があるのかわかりません。
繰り返しますが、catch ブロックに return があると機能しません。それがないと機能しません...なぜこれが起こるのか、私には本当にわかりません。
何か案は?