使用 webservice 调用一些使用资源文件的 java 应用程序方法时出现问题
我在我的 java src 文件夹中创建了一个包含以下目录结构的 java 应用程序。
Src/
Transcriber.java
config.xml
digits.gram
transcriber.manifest
我已经使用 .aar 文件成功创建了这个 java 应用程序的 web 服务,并将其放入 axis2 服务文件夹
我将整个打包在 Transcriber.aar 文件中,结构如下
Transcriber\edu\cmu\sphinx\demo\transcriber
在上面我列出的所有 4 个文件中。
我在上面的 Transcriber.java 类中有两种方法。第一种方法只是在没有任何其他文件使用的情况下进行处理(例如 config.xml、digits.gram 和 transcriber.manifest)。它工作正常,我可以轻松地从 android 调用该方法。
但我的第二种方法也使用其他文件(例如 config.xml、digits.gram 和 transcriber.manifest)来处理我想要的一些逻辑。
但是,当我调用第二种方法时,我遇到了一些错误,而当我从 android 设备调用第二种方法时,它给了我错误。
我的错误如下:
at java.lang.Thread.run(Thread.java:662)
Caused by: Property exception component:'jsgfGrammar' property:'grammarLocation'
- Can't locate resource:/edu/cmu/sphinx/demo/transcriber
edu.cmu.sphinx.util.props.InternalConfigurationException: Can't locate resource:
/edu/cmu/sphinx/demo/transcriber
它给了我一些错误,它无法找到我用来通过 config.xml 文件在 config.xml 中添加此代码的语法文件 digits.gram
<component name="jsgfGrammar" type="edu.cmu.sphinx.jsgf.JSGFGrammar">
<property name="dictionary" value="dictionary"/>
<property name="grammarLocation"
value="resource:/edu/cmu/sphinx/demo/transcriber"/>
<property name="grammarName" value="digits"/>
<property name="logMath" value="logMath"/>
</component>
为什么我会出现这种错误?enter code here
我的代码首先获取 CONFIG.XML,然后 CONFIG.XML 获取另一个资源文件....它成功找到了 config.xml,但是 config.xml 中的代码无法找到其他资源文件
package edu.cmu.sphinx.demo.transcriber;
import edu.cmu.sphinx.frontend.util.AudioFileDataSource;
import edu.cmu.sphinx.recognizer.Recognizer;
import edu.cmu.sphinx.result.Result;
import edu.cmu.sphinx.util.props.ConfigurationManager;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
/** A simple example that shows how to transcribe a continuous audio file that has multiple utterances in it. */
public class TranscribeSimpleGrammar {
private static final String PATH = "file:///D:\\Sound\\";
@SuppressWarnings({ "null", "null" })
public String recognize_wave(String wavePath) throws MalformedURLException{
URL audioURL;
// if (args.length > 0) {
// audioURL = new File(args[0]).toURI().toURL();
// } else {
//audioURL = TranscribeSimpleGrammar.class.getResource("hello.wav");
//audioURL = new URL(PATH + "turn-on-light-kitchen-male.wav");
//audioURL = new URL(PATH + "turn-down-tv-volume-female.wav");
// audioURL = new URL(PATH + wavePath);
audioURL = new URL(wavePath);
//audioURL = new URL(PATH + "turn-down-dining-room-music-player-volume-male.wav");
// }
URL configURL = TranscribeSimpleGrammar.class.getResource("config.xml");
ConfigurationManager cm = new ConfigurationManager(configURL);
Recognizer recognizer = (Recognizer) cm.lookup("recognizer");
/* allocate the resource necessary for the recognizer */
recognizer.allocate();
// configure the audio input for the recognizer
AudioFileDataSource dataSource = (AudioFileDataSource) cm.lookup("audioFileDataSource");
dataSource.setAudioFile(audioURL, null);
// Loop until last utterance in the audio file has been decoded, in which case the recognizer will return null.
Result result;
while ((result = recognizer.recognize())!= null) {
String resultText = result.getBestResultNoFiller();
System.out.println(resultText);
}
return result.getBestResultNoFiller();
}
public String get_wav_byte(byte[] wavbite,String path){
String result1="null";
try
{
File dstFile = new File(path);
FileOutputStream out = new FileOutputStream(dstFile);
out.write(wavbite, 0, wavbite.length);
out.close();
}
catch (IOException e)
{
System.out.println("IOException : " + e);
}
try {
result1=recognize_wave(path);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result1;
}
}