2012-06-18 2 views
0

java.protocol.handler를 사용하는 웹 응용 프로그램을 유지 관리하고 있습니다. 나는 그것을 사용하여 값으로 초기화 : -Djava.protocol.handler.pkgs=<my value>. 문제는 다음과 같습니다. 1. 앱을 배포하는 경우. 이 instruction (Tomcat 메인 클래스를 직접 참조)을 사용하여 직접 Eclipse에서 Tomcat으로 이동하고 VM 인수 탭에 -Djava.protocol.handler.pkgs=<my value> 인수를 전달하면 응용 프로그램이 제대로 작동하고 -protocol 종속 bean이 초기화됩니다. Malformed URL supplied Exception을 : 내가 직접 톰캣/웹 어플리케이션에 .war 파일을 배포하고 catalina.bat 내가 얻을 (JAVA_OPTS-Djava.protocol.handler.pkgs=<my value> 추가)와 바람둥이를 시작 2.If다른 JVM 동작 : Eclipse에서 Tomcat 시작, Catalina.bat 시작

. 3. Eclipse에서 Tomcat을 시작하면 (그리고 1 번과 비슷한 VM 인수를 지정하면) 동일한 .war 파일이 올바르게 배포됩니다.

내 생각에 catalina.bat와 eclipse가 VM 매개 변수를 초기화하는 방법에는 차이가 있습니다. 또는 어쨌든 Tomcat에 프로젝트 .jars를 첨부해야합니다.

감사합니다. 필요한 세부 정보를 더 많이 제공 할 수 있습니다.

+0

당신의 세부 사항이 약간 스케치입니다

어쩌면이 다른 사람을 도움이 ... 톰캣 전 6.0.x에서 작동 .protocol.handler.pkgs = XXX 값 또는 심지어 원인이되는 전체 .bat 파일 오류. 또한 가능한 경우 스택 추적을 포함한 오류의 전체 세부 정보. – davidfrancis

+0

불행히도 정확한 프로토콜 이름을 제공 할 수는 없지만, JVM 설정의 차이점 때문에 어떤 경우에는 작동하기 때문에 실제로는 관련이 없다고 생각했습니다. catalina.bat에 관해서는 아파치 톰캣 6.0.35, setenv.bat 파일에서 표준이고 변경되지 않은 파일입니다 : JAVA_OPTS = -Djava.protocol.handler.pkgs = <사용자 정의 프로토콜> -DJINTEGRA_NATIVE_MODE – guruk

+0

오류 (불행히도 캔트는 스택 추적 때문에 일부 Java 클래스를 사용합니다.) 속성 "configURL"예외가 발생했습니다. 중첩 예외 : 제공된 잘못된 URL : null. JVM java.protocol.handler.pkgs 인수가 어떻게 든 초기화되지 않았거나 그것에 의존하는 bean이 생성 된 후 초기화 되었기 때문에 URL이 기형으로 처리됩니다. – guruk

답변

0

의견에 따라 더 자세한 정보가 없으면 어떤 일이 벌어지고 있는지 알기는 어렵지만 도움이 될 수 있습니다. Tomcat은 URL.setURLStreamHandlerFactory을 호출하여 URLStreamHandlerFactory을 설정합니다. 이는 java.protocol.handler.pkgs 시스템 속성의 기본 동작을 덮어 씁니다. 내부 Tomcat 기능을 손상시키지 않고 자신의 처리기로 URL.setURLStreamHandlerFactory을 호출 할 수 없습니다. URLStreamHandler 시스템은 확실히 Java의 가장 큰 특징은 아닙니다.

내가 확실하게 내 자신의 스트림 핸들러를 사용하는 것으로 나타났습니다 유일한 방법은 URL constructor로 전달하는 것입니다

URL url = new URL(null, "http://example.com", myURLStreamHandler); 
+0

안녕하세요. 문제를 해결하는 중입니다. 요약하면 다음과 같습니다. Nathan의 솔루션이 트릭을 수행했습니다. 영향을받는 클래스에 대한 소스 코드를 요청할 수있을 정도로 충분히 운이 좋았습니다 (속성 값이 String 값으로 설정되어 있고이를 변경해야했기 때문에). 실제로 : catalina.bat에서 시작된 경우 tomcat은 사용자 java.protocol ... 설정을 재정의합니다. 다른 스레드에서 언급했듯이 Jetty를 사용해 보았을 때도 마찬가지였습니다. 바람둥이와 부두를 사용할 때 일반적으로 java.protocol.handler.pkgs에 문제가 있습니다. 운 좋게도 나는 소스 코드에 액세스했다. – guruk

0

우리가 발견 한 그 -Djava.protocol.handler.pkgs = "내. 당신은 아마 -Djava을 제공해야한다 - 프로토콜의 구현은 톰캣의 lib 폴더에 아닌 전쟁에 있으면 프로토콜은 "

+0

나는 이것을 설명 할 수있다. URL.handlers 맵에 구체적인 프로토콜 핸들러가 추가되면 다시 평가되지 않는다. 핸들러 클래스가 WebApp 클래스 경로에 나타나는 경우 - 너무 늦습니다 (예 : 'gopher : //'와 같이 지금까지 요청되지 않은 외래 프로토콜에 대한 핸들러를 재정의하려고 시도하지 않는 한). 따라서 클래스는 시스템 클래스 로더에 의해로드 가능해야합니다. –