Skip to content

Commit a00245c

Browse files
authored
Add message on DocumentModelOperationException (Azure#26202)
1 parent 82eed31 commit a00245c

File tree

12 files changed

+139
-73
lines changed

12 files changed

+139
-73
lines changed

sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/DocumentAnalysisAsyncClient.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,6 @@ private Mono<PollResponse<DocumentOperationResult>> processAnalyzeModelResponse(
420420
status = LongRunningOperationStatus.SUCCESSFULLY_COMPLETED;
421421
break;
422422
case FAILED:
423-
// TODO (Revisit error logic https://github.com/Azure/azure-sdk-for-java-pr/issues/1337)
424423
throw logger.logExceptionAsError(
425424
Transforms.toDocumentModelOperationException(analyzeResultOperationResponse.getValue().getError()));
426425
default:

sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/administration/DocumentModelAdministrationAsyncClient.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -941,7 +941,6 @@ private Mono<PollResponse<DocumentOperationResult>> processBuildingModelResponse
941941
status = LongRunningOperationStatus.SUCCESSFULLY_COMPLETED;
942942
break;
943943
case FAILED:
944-
// TODO (Revisit error logic https://github.com/Azure/azure-sdk-for-java-pr/issues/1337)
945944
throw logger.logExceptionAsError(
946945
Transforms.toDocumentModelOperationException(getOperationResponse.getError()));
947946
case CANCELED:

sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/administration/models/DocumentModelOperationError.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
package com.azure.ai.formrecognizer.administration.models;
55

6-
import com.azure.ai.formrecognizer.implementation.util.FormRecognizerErrorHelper;
6+
import com.azure.ai.formrecognizer.implementation.util.DocumentModelOperationErrorHelper;
77

88
import java.util.List;
99

@@ -132,7 +132,7 @@ void setInnerError(DocumentModelOperationInnerError innerError) {
132132
}
133133

134134
static {
135-
FormRecognizerErrorHelper.setAccessor(new FormRecognizerErrorHelper.FormRecognizerErrorAccessor() {
135+
DocumentModelOperationErrorHelper.setAccessor(new DocumentModelOperationErrorHelper.DocumentModelOperationErrorAccessor() {
136136
@Override
137137
public void setCode(DocumentModelOperationError documentModelOperationError, String errorCode) {
138138
documentModelOperationError.setCode(errorCode);

sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/implementation/util/DocumentAnalysisExceptionHelper.java

Lines changed: 0 additions & 37 deletions
This file was deleted.

sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/implementation/util/FormRecognizerErrorHelper.java renamed to sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/implementation/util/DocumentModelOperationErrorHelper.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,16 @@
1111
/**
1212
* The helper class to set the non-public properties of an {@link DocumentModelOperationError} instance.
1313
*/
14-
public final class FormRecognizerErrorHelper {
15-
private static FormRecognizerErrorAccessor accessor;
14+
public final class DocumentModelOperationErrorHelper {
15+
private static DocumentModelOperationErrorAccessor accessor;
1616

17-
private FormRecognizerErrorHelper() {
17+
private DocumentModelOperationErrorHelper() {
1818
}
1919

2020
/**
2121
* Type defining the methods to set the non-public properties of an {@link DocumentModelOperationError} instance.
2222
*/
23-
public interface FormRecognizerErrorAccessor {
23+
public interface DocumentModelOperationErrorAccessor {
2424
void setCode(DocumentModelOperationError documentModelOperationError, String errorCode);
2525
void setMessage(DocumentModelOperationError documentModelOperationError, String message);
2626

@@ -34,10 +34,10 @@ public interface FormRecognizerErrorAccessor {
3434
/**
3535
* The method called from {@link DocumentModelOperationError} to set it's accessor.
3636
*
37-
* @param formRecognizerErrorAccessor The accessor.
37+
* @param documentModelOperationErrorAccessor The accessor.
3838
*/
39-
public static void setAccessor(final FormRecognizerErrorAccessor formRecognizerErrorAccessor) {
40-
accessor = formRecognizerErrorAccessor;
39+
public static void setAccessor(final DocumentModelOperationErrorAccessor documentModelOperationErrorAccessor) {
40+
accessor = documentModelOperationErrorAccessor;
4141
}
4242

4343
static void setCode(DocumentModelOperationError documentModelOperationError, String errorCode) {

sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/implementation/util/Transforms.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -563,10 +563,9 @@ public static DocumentOperationResult toDocumentOperationResult(
563563
}
564564

565565
public static DocumentModelOperationException toDocumentModelOperationException(Error error) {
566-
DocumentModelOperationException documentModelOperationException = new DocumentModelOperationException();
567566
DocumentModelOperationError documentModelOperationError = toDocumentModelOperationError(error);
568-
DocumentAnalysisExceptionHelper.setErrorInformation(documentModelOperationException,
569-
documentModelOperationError);
567+
DocumentModelOperationException documentModelOperationException
568+
= new DocumentModelOperationException(documentModelOperationError);
570569
return documentModelOperationException;
571570
}
572571

@@ -589,11 +588,11 @@ private static ResponseError toResponseError(Error error) {
589588
private static DocumentModelOperationError toDocumentModelOperationError(Error error) {
590589
if (error != null) {
591590
DocumentModelOperationError documentModelOperationError = new DocumentModelOperationError();
592-
FormRecognizerErrorHelper.setCode(documentModelOperationError, error.getCode());
593-
FormRecognizerErrorHelper.setInnerError(documentModelOperationError, toInnerError(error.getInnererror()));
594-
FormRecognizerErrorHelper.setDetails(documentModelOperationError, toErrorDetails(error.getDetails()));
595-
FormRecognizerErrorHelper.setMessage(documentModelOperationError, error.getMessage());
596-
FormRecognizerErrorHelper.setTarget(documentModelOperationError, error.getTarget());
591+
DocumentModelOperationErrorHelper.setCode(documentModelOperationError, error.getCode());
592+
DocumentModelOperationErrorHelper.setInnerError(documentModelOperationError, toInnerError(error.getInnererror()));
593+
DocumentModelOperationErrorHelper.setDetails(documentModelOperationError, toErrorDetails(error.getDetails()));
594+
DocumentModelOperationErrorHelper.setMessage(documentModelOperationError, error.getMessage());
595+
DocumentModelOperationErrorHelper.setTarget(documentModelOperationError, error.getTarget());
597596
return documentModelOperationError;
598597
}
599598
return null;

sdk/formrecognizer/azure-ai-formrecognizer/src/main/java/com/azure/ai/formrecognizer/models/DocumentModelOperationException.java

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,10 @@
44
package com.azure.ai.formrecognizer.models;
55

66
import com.azure.ai.formrecognizer.administration.models.DocumentModelOperationError;
7-
import com.azure.ai.formrecognizer.implementation.util.DocumentAnalysisExceptionHelper;
87
import com.azure.core.exception.AzureException;
98

109
/**
11-
* General exception for client-side related failures related to document model analysis, or creation
10+
* Exception for failures related to errors encountered during document analysis, or creation
1211
* operation.
1312
*
1413
* @see DocumentModelOperationError
@@ -18,27 +17,26 @@ public final class DocumentModelOperationException extends AzureException {
1817
/**
1918
* the error information for this exception.
2019
*/
21-
private DocumentModelOperationError documentModelOperationError;
20+
private final DocumentModelOperationError documentModelOperationError;
2221

2322
/**
24-
* Get the error information for this exception.
23+
* Constructs a new DocumentModelOperationException
2524
*
26-
* @return the error information for this exception.
25+
* @param documentModelOperationError the documentModelOperationError underlying this exception
2726
*/
28-
public DocumentModelOperationError getDocumentModelOperationError() {
29-
return this.documentModelOperationError;
27+
public DocumentModelOperationException(DocumentModelOperationError documentModelOperationError) {
28+
super(documentModelOperationError.getInnerError() != null
29+
? documentModelOperationError.getInnerError().getMessage()
30+
: documentModelOperationError.getMessage());
31+
this.documentModelOperationError = documentModelOperationError;
3032
}
3133

3234
/**
33-
* Set the error information for this exception.
35+
* Get the error information for this exception.
36+
*
37+
* @return the error information for this exception.
3438
*/
35-
void setDocumentModelOperationError(DocumentModelOperationError documentModelOperationError) {
36-
this.documentModelOperationError = documentModelOperationError;
37-
}
38-
39-
static {
40-
DocumentAnalysisExceptionHelper.setAccessor(
41-
((documentModelOperationException, documentModelOperationError)
42-
-> documentModelOperationException.setDocumentModelOperationError(documentModelOperationError)));
39+
public DocumentModelOperationError getDocumentModelOperationError() {
40+
return this.documentModelOperationError;
4341
}
4442
}

sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/TestUtils.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ public final class TestUtils {
6666

6767
public static final String FORM_RECOGNIZER_TRAINING_BLOB_CONTAINER_SAS_URL_CONFIGURATION =
6868
Configuration.getGlobalConfiguration().get("FORM_RECOGNIZER_TRAINING_BLOB_CONTAINER_SAS_URL");
69+
public static final String FORM_RECOGNIZER_ERROR_TRAINING_BLOB_CONTAINER_SAS_URL_CONFIGURATION =
70+
Configuration.getGlobalConfiguration().get("FORM_RECOGNIZER_ERROR_TRAINING_BLOB_CONTAINER_SAS_URL");
6971
public static final String FORM_RECOGNIZER_TESTING_BLOB_CONTAINER_SAS_URL_CONFIGURATION =
7072
Configuration.getGlobalConfiguration().get("FORM_RECOGNIZER_TESTING_BLOB_CONTAINER_SAS_URL");
7173
public static final String AZURE_FORM_RECOGNIZER_API_KEY_CONFIGURATION
@@ -128,6 +130,10 @@ public static void getTrainingDataContainerHelper(Consumer<String> testRunner, b
128130
testRunner.accept(getTrainingFilesContainerUrl(isPlaybackMode));
129131
}
130132

133+
public static void getErrorTrainingDataContainerHelper(Consumer<String> testRunner, boolean isPlaybackMode) {
134+
testRunner.accept(getErrorTrainingFilesContainerUrl(isPlaybackMode));
135+
}
136+
131137
public static void getMultipageTrainingContainerHelper(Consumer<String> testRunner, boolean isPlaybackMode) {
132138
testRunner.accept(getMultipageTrainingSasUri(isPlaybackMode));
133139
}
@@ -173,6 +179,15 @@ private static String getTrainingFilesContainerUrl(boolean isPlaybackMode) {
173179
return isPlaybackMode ? "https://isPlaybackmode" : FORM_RECOGNIZER_TRAINING_BLOB_CONTAINER_SAS_URL_CONFIGURATION;
174180
}
175181

182+
/**
183+
* Get the training data set SAS Url value based on the test running mode.
184+
*
185+
* @return the training data set Url
186+
*/
187+
private static String getErrorTrainingFilesContainerUrl(boolean isPlaybackMode) {
188+
return isPlaybackMode ? "https://isPlaybackmode" : FORM_RECOGNIZER_ERROR_TRAINING_BLOB_CONTAINER_SAS_URL_CONFIGURATION;
189+
}
190+
176191
/**
177192
* Get the multipage training data set SAS Url value based on the test running mode.
178193
*

sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/administration/DocumentModelAdministrationAsyncClientTest.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@
88
import com.azure.ai.formrecognizer.administration.models.CopyAuthorization;
99
import com.azure.ai.formrecognizer.administration.models.CreateComposedModelOptions;
1010
import com.azure.ai.formrecognizer.administration.models.DocumentModel;
11+
import com.azure.ai.formrecognizer.administration.models.DocumentModelOperationError;
1112
import com.azure.ai.formrecognizer.implementation.util.Utility;
1213
import com.azure.ai.formrecognizer.models.AnalyzeResult;
14+
import com.azure.ai.formrecognizer.models.DocumentModelOperationException;
1315
import com.azure.ai.formrecognizer.models.DocumentOperationResult;
1416
import com.azure.core.exception.HttpResponseException;
1517
import com.azure.core.http.HttpClient;
@@ -197,6 +199,33 @@ public void beginBuildModel(HttpClient httpClient, DocumentAnalysisServiceVersio
197199
});
198200
}
199201

202+
/**
203+
* Verifies that building a model throws a DocumentModelOperationException when the training container is missing
204+
* OCR files.
205+
*/
206+
@ParameterizedTest(name = DISPLAY_NAME_WITH_ARGUMENTS)
207+
@MethodSource("com.azure.ai.formrecognizer.TestUtils#getTestParameters")
208+
public void beginBuildModelThrowsDocumentModelOperationException(HttpClient httpClient, DocumentAnalysisServiceVersion serviceVersion) {
209+
client = getDocumentModelAdminAsyncClient(httpClient, serviceVersion);
210+
buildModelErrorRunner((errorTrainingFilesUrl) -> {
211+
DocumentModelOperationException documentModelOperationException
212+
= Assertions.assertThrows(DocumentModelOperationException.class,
213+
() ->
214+
client.beginBuildModel(errorTrainingFilesUrl, null)
215+
.setPollInterval(durationTestMode)
216+
.getSyncPoller()
217+
.getFinalResult());
218+
219+
Assertions.assertEquals("Invalid request.", documentModelOperationException.getMessage());
220+
DocumentModelOperationError actualError =
221+
documentModelOperationException.getDocumentModelOperationError();
222+
Assertions.assertEquals("InvalidRequest", actualError.getCode());
223+
Assertions.assertEquals("Could not build the model: Can't find any OCR files for training.",
224+
actualError.getDetails().get(0).getMessage());
225+
226+
});
227+
}
228+
200229
/**
201230
* Verifies the result of the copy operation for valid parameters.
202231
*/

sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/administration/DocumentModelAdministrationClientTestBase.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ DocumentModelAdministrationClientBuilder getDocumentModelAdminClientBuilder(Http
6363
if (useKeyCredential) {
6464
builder.credential(new AzureKeyCredential(TestUtils.AZURE_FORM_RECOGNIZER_API_KEY_CONFIGURATION));
6565
} else {
66-
System.out.println("In LIVE MODE");
6766
builder.credential(new DefaultAzureCredentialBuilder().build());
6867
}
6968
}
@@ -108,6 +107,10 @@ void buildModelRunner(Consumer<String> testRunner) {
108107
TestUtils.getTrainingDataContainerHelper(testRunner, interceptorManager.isPlaybackMode());
109108
}
110109

110+
void buildModelErrorRunner(Consumer<String> testRunner) {
111+
TestUtils.getErrorTrainingDataContainerHelper(testRunner, interceptorManager.isPlaybackMode());
112+
}
113+
111114
void multipageTrainingRunner(Consumer<String> testRunner) {
112115
TestUtils.getMultipageTrainingContainerHelper(testRunner, interceptorManager.isPlaybackMode());
113116
}

0 commit comments

Comments
 (0)