webview を使用して単一の Web サイトにアクセスする JavaFX アプリケーション用の独自のプロトコルハンドラーを作成しようとしています。これまでに行ったこと
私のカスタム URLStreamHandlerFactory
public class MyURLStreamHandlerFactory implements URLStreamHandlerFactory {
public URLStreamHandler createURLStreamHandler(String protocol) {
System.out.println("Protocol: " + protocol);
if (protocol.equalsIgnoreCase("http") || protocol.equalsIgnoreCase("https")) {
return new MyURLStreamHandler();
} else {
return new URLStreamHandler() {
@Override
protected URLConnection openConnection(URL u) throws IOException {
return new URLConnection(u) {
@Override
public void connect() throws IOException {
}
};
}
};
}
}
}
私のカスタム URLStreamHandler
public class MyURLStreamHandler extends java.net.URLStreamHandler{
protected HttpURLConnection openConnection(URL u){
MyURLConnection q = new MyURLConnection(u);
return q;
}
}
私のカスタム HttpURLConnection
public class MyURLConnection extends HttpURLConnection {
static int defaultPort = 443;
InputStream in;
OutputStream out;
Socket s;
publicMyURLConnection(URL url) {
super(url);
try {
setRequestMethod("POST");
} catch (ProtocolException ex) {
ex.printStackTrace();
}
}
public void setRequestProperty(String name, String value){
super.setRequestProperty(name, value);
System.out.println("Namee: " + name);
System.out.println("Value: " + value);
}
public String getRequestProperty(String name){
System.out.println("GET REQUEST: ");
return super.getRequestProperty(name);
}
public OutputStream getOutputStream() throws IOException {
OutputStream os = super.getOutputStream();
System.out.println("Output: " + os);
return os;
}
public InputStream getInputStream() throws IOException {
InputStream is = super.getInputStream();
System.out.println("INout stream: " + is);
return is;
}
@Override
public void connect() throws IOException {
}
@Override
public void disconnect() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public boolean usingProxy() {
throw new UnsupportedOperationException("Not supported yet.");
}
アプリケーションを実行すると、いくつかのヘッダーが設定されているように見えますが、次のエラーが表示されます
Jul 08, 2013 11:09:04 AM com.sun.webpane.webkit.network.URLLoader doRun
WARNING: Unexpected error
java.net.UnknownServiceException: protocol doesn't support input
at java.net.URLConnection.getInputStream(URLConnection.java:839)
at qmed.QMedURLConnection.getInputStream(MyURLConnection.java:67)
at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:468)
at com.sun.webpane.webkit.network.URLLoader.receiveResponse(URLLoader.java:383)
at com.sun.webpane.webkit.network.URLLoader.doRun(URLLoader.java:142)
at com.sun.webpane.webkit.network.URLLoader.access$000(URLLoader.java:44)
at com.sun.webpane.webkit.network.URLLoader$1.run(URLLoader.java:106)
at com.sun.webpane.webkit.network.URLLoader$1.run(URLLoader.java:103)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.webpane.webkit.network.URLLoader.run(URLLoader.java:103)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
私がやりたいことは、特定の要求に対する応答を取得し、そのバイナリ データを読み取ることだけです。プロトコルがデフォルトのプロトコルとまったく同じように動作し、特定の応答のバイナリ データのみをチェックするようにします。私は何を間違っていますか?
アプリケーションは、URLConnections のすべてのショートを実行しています。MyURLStreamHandlerFactory で行っているように、プロトコルが http または https のときにカスタム URLConnection クラスとして HTTPURLConnection を使用し、他のプロトコルが使用されているときにデフォルトの URLStreamHandler を開始するのは正しいですか? すべてのプロトコルを同じように処理するには、MYURLConnection のデフォルトの URLConnection クラスを拡張する必要がありますか?
これはプロジェクトを脅かす問題であるため、どんな助けも大歓迎です
ありがとうございました