@@ -57,36 +57,40 @@ public TranslateResource(ServerStatus serverStatus, long timeoutMillis) {
5757 this .serverStatus = serverStatus ;
5858 this .timeoutMillis = timeoutMillis ;
5959 }
60-
61- @ PUT
60+
61+ // TIKA-4526: handle @PUT and @POST separately to avoid nondeterministic failures
6262 @ POST
6363 @ Path ("/all/{translator}/{src}/{dest}" )
6464 @ Consumes ("*/*" )
6565 @ Produces ("text/plain" )
66- public String translate (final InputStream is , @ PathParam ("translator" ) String translator , @ PathParam ("src" ) String sLang , @ PathParam ("dest" ) String dLang )
66+ public String translatePost (final InputStream is , @ PathParam ("translator" ) String translator , @ PathParam ("src" ) String sLang , @ PathParam ("dest" ) String dLang )
6767 throws TikaException , IOException {
6868 return doTranslate (IOUtils .toString (is , UTF_8 ), translator , sLang , dLang );
69-
7069 }
7170
7271 @ PUT
72+ @ Path ("/all/{translator}/{src}/{dest}" )
73+ @ Consumes ("*/*" )
74+ @ Produces ("text/plain" )
75+ public String translatePut (final InputStream is , @ PathParam ("translator" ) String translator , @ PathParam ("src" ) String sLang , @ PathParam ("dest" ) String dLang )
76+ throws TikaException , IOException {
77+ return doTranslate (IOUtils .toString (is , UTF_8 ), translator , sLang , dLang );
78+ }
79+
7380 @ POST
7481 @ Path ("/all/{translator}/{dest}" )
7582 @ Consumes ("*/*" )
7683 @ Produces ("text/plain" )
77- public String autoTranslate (final InputStream is , @ PathParam ("translator" ) String translator , @ PathParam ("dest" ) String dLang ) throws TikaException , IOException {
78- final String content = IOUtils .toString (is , UTF_8 );
79- LanguageResult language = new OptimaizeLangDetector ()
80- .loadModels ()
81- .detect (content );
82- if (language .isUnknown ()) {
83- throw new TikaException ("Unable to detect language to use for translation of text" );
84- }
85-
86- String sLang = language .getLanguage ();
87- LOG .info ("LanguageIdentifier: detected source lang: [{}]" , sLang );
84+ public String autoTranslatePost (final InputStream is , @ PathParam ("translator" ) String translator , @ PathParam ("dest" ) String dLang ) throws TikaException , IOException {
85+ return doAutoTranslate (IOUtils .toString (is , UTF_8 ), translator , dLang );
86+ }
8887
89- return doTranslate (content , translator , sLang , dLang );
88+ @ PUT
89+ @ Path ("/all/{translator}/{dest}" )
90+ @ Consumes ("*/*" )
91+ @ Produces ("text/plain" )
92+ public String autoTranslatePut (final InputStream is , @ PathParam ("translator" ) String translator , @ PathParam ("dest" ) String dLang ) throws TikaException , IOException {
93+ return doAutoTranslate (IOUtils .toString (is , UTF_8 ), translator , dLang );
9094 }
9195
9296 private String doTranslate (String content , String translator , String sLang , String dLang ) throws TikaException , IOException {
@@ -107,6 +111,20 @@ private String doTranslate(String content, String translator, String sLang, Stri
107111 serverStatus .complete (taskId );
108112 }
109113 }
114+
115+ private String doAutoTranslate (String content , String translator , String dLang ) throws TikaException , IOException {
116+ LanguageResult language = new OptimaizeLangDetector ()
117+ .loadModels ()
118+ .detect (content );
119+ if (language .isUnknown ()) {
120+ throw new TikaException ("Unable to detect language to use for translation of text" );
121+ }
122+
123+ String sLang = language .getLanguage ();
124+ LOG .info ("LanguageIdentifier: detected source lang: [{}]" , sLang );
125+
126+ return doTranslate (content , translator , sLang , dLang );
127+ }
110128
111129 private Translator byClassName (String className ) {
112130 List <Translator > translators = loader .loadStaticServiceProviders (Translator .class );
0 commit comments