Исключение пускового фильтра WebSocket filter netbeans 7.3 glassfish 4
Я пытаюсь реализовать простой передачи видео между двумя HTML-страницами, используя Java Websocket API. Сервер веб-камеры захватывает веб-камеру и отправляет ее на конечную точку сервера, которая передает данные всем подключенным клиентам. Код сервера веб-камеры
<video autoplay id="vid" style="display: none;"></video>
<canvas id="canvas" width="640" height="480" style="border: 1px solid #d3d3d3;"></canvas>
<div id="data1"></div>
<script>
var video = document.querySelector("#vid");
var canvas = document.querySelector('#canvas');
var ctx = canvas.getContext('2d');
var localMediaStream = null;
var ws = new WebSocket("ws://127.0.0.1:8080/WebApplication5/endpointwcv");
ws.onopen = function () {
console.log("Openened connection to websocket");
};
ws.onerror = function (evt) {
writeToScreen('<span style="color: red;">ERROR:</span> ' + evt.data);
};
var onCameraFail = function (e) {
console.log('Camera did not work.', e);
};
timer = setInterval(function () {
ctx.drawImage(video, 0, 0, 640, 480);
var data = canvas.toDataURL('image/jpeg', 1.0);
ws.send(data);
}, 255);
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;
window.URL = window.URL || window.webkitURL;
navigator.getUserMedia({ video: true }, function (stream) {
video.src = window.URL.createObjectURL(stream);
}, onCameraFail);
Код для конечной точки сервера /* Импортирует сюда */
@ServerEndpoint("/endpointwcv")
public class NewWSEndpoint {
private static Set<Session> peers = Collections.synchronizedSet(new HashSet<Session>());
@OnMessage
public String onMessage( Session session,byte[] data) {
try {
System.out.println(data);
for(Session s:peers){
s.getBasicRemote().sendObject(data);
}
} catch (IOException | EncodeException e) {
System.out.println("Error in facedetection, ignoring message:" + e.getMessage());
}
return null;
}
public String onMessage( Session session,String data) {
try {
System.out.println(data);
for(Session s:peers){
s.getBasicRemote().sendText(data);
}
} catch (IOException e) {
System.out.println("Error in facedetection, ignoring message:" + e.getMessage());
}
return null;
}
@OnOpen
public void onOpen(Session session) throws IOException {
peers.add(session);
session.getBasicRemote().sendText("hiiiiiii");
}
@OnClose
public void onClose() {
System.out.println("Closed");
}
@OnError
public void onError(Session s, Throwable t) {
System.out.println("error");
}
}
И есть принимающий клиент, который получает доступ к веб-камере
<div id="d1"></div>
<canvas id="target" width="640" height="480" style="border: 1px solid #d3d3d3;"></canvas>
<script>
var ws = new WebSocket("ws://127.0.0.1:8080/WebApplication5/endpointwcv");
var myURL = window.URL || window.webkitURL;
ws.onopen = function () {
console.log("Openened connection to websocket");
};
ws.onmessage=function (msg) {
var target = document.getElementById("target");
url=myURL.createObjectURL(msg);
target.src = url;
};
</script>
При запуске проекта на GlassFish 4.0 с java ee 7 api ничего не происходит. Пожалуйста, помогите мне. На консоли есть предупреждение
WARNING: Class 'javax.ejb.PostActivate' not found, interception based on it is not enabled
WARNING: Class 'javax.ejb.PrePassivate' not found, interception based on it is not enabled
.....
Exception starting filter WebSocket filter
java.lang.InstantiationException
at org.apache.catalina.core.ApplicationFilterConfig.(ApplicationFilterConfig.java:135)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:5297)
...
1 ответ
Я вижу пару проблем с вашим проектом здесь. Прежде всего, у вас есть совпадение сопоставления URL между Struts и WebSocket. URL вашего WebSocket /endpointwcv
, Ваше отображение Struts /*
, Когда я наконец-то получил ваше приложение для развертывания, я получил сообщения от Struts о том, что для этого действия нет сопоставления /endpointwcv
,
Если вы измените отображение сервлета Struts filter на /struts/*
(и мне пришлось поменять filter-class
в org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
чтобы избежать сообщений об ошибках о том, как FilterDispatcher
устарела), вы можете получить доступ к конечной точке WebSocket, перейдя в http://localhost:8080/WebApplication5/Conference.html
, В файле GlassFish4 server.log я видел вывод NewWSEndpoint
:
INFO: aaaa
INFO: error
INFO: error
INFO: error
...
INFO: Closed
Собираюсь http://localhost:8080/WebApplication5/ConferenceClient.html
Я вижу в server.log:
INFO: aaaa
Я не эксперт Struts, но, похоже, вам нужно исправить конечную точку, а затем выяснить, как реализовать интерфейс Struts, чтобы он не мешал URL-адресу вашей конечной точки WebSocket.