2010-01-14 2 views
6

Glassfish에서 엔터프라이즈 응용 프로그램을 실행할 때 the following problem (다른 사용자가보고 한 것)이 있습니다. 부두에서 그것은 잘 작동합니다.Glassfish에서 Metro를 통한 CXF를 선택하는 방법

javax/xml/ws/spi/Provider은 META-INF/services/javax.xml.ws.spi.Provider 리소스를 만들지 만 여기에는 CXF와 함께 제공되고 추가 리소스 파일을 만들면 Glassfish에서이 문제가 해결되지 않습니다.

누구든지 GlassFish에서 CXF를 선택하는 방법을 알고 있습니까?
(CXF 종속 2.2.5를 사용하는 Maven 다중 모듈 프로젝트를 사용 중입니다.)

고마워요!


편집 # 1

지금 바로 메트로 작업을위한 문제를 건너 뛰는,하지만 난 정말 사람이 어떤 포인터가 아닌 경우에는 CXF를 사용하는 방법을 알고 싶습니다 .. 아무것도 작동하지 않으면 나는 웹 응용 프로그램 컨테이너를 전환 (또는 내 요구 사항을 채우기 위해 지하철로 보면)


편집 # 2을 수

일부 해결책은 sun-web.xml 파일에 <class-loader delegate="false"/>을 추가하여 전쟁에 대한 해결책을 자세히 설명합니다. 그러나 이것은 비 전쟁 응용 프로그램에서는 작동하지 않습니다.

+0

난 단지 귀 포장의 EJB와 같은 문제를 찾는거야 :

은 당신이해야 할 일의 JIST입니다. 제가 질문을 복제하지 않아도 좋은 답변을 듣고 싶다는 현상금을 열었습니다. – javamonkey79

+0

+1 : 글래스 피쉬의 나쁜 특징입니다. 글래스 피쉬는 jsf 라이브러리를 내장하고 있으며 jsf가있는 코드에 대해 충돌을 일으 킵니다. 정말 짜증나는 해결책은 열려있는 현상금의 가치가 있습니다! 나는 또한 해결책을 절대적으로 알고 싶다! – mico

+0

또한 [이 게시물] (http : //www.shareyourwork.org/roller/ralphsjavablog/entry/axiom_jar_conflict_in_glassfish)는 일들이 글래스 피어 버전에서만 작동하는 것을 말하고 있습니다. – mico

답변

1

메트로 (Glassfish의 JAX-WS 구현) 병은 글래스 피쉬에 포함되어있을 것입니다. 클래스 패스에서 제외 할 수 있습니까? Maven을 사용하고 있으므로 glassfish 종속성을 분석하고 메트로 항아리를 제외해야합니다.


Metro jar보다 먼저 응용 프로그램 classpath에 CXF jar가 있어야하는 것 같습니다. 시스템 클래스 로더/클래스 경로를 수정할 수는 없지만 Thread.currentThread().getContextClassLoader()을 변경하여 CXF가 먼저로드되도록 할 수 있습니다. 이 또한 글래스 피쉬의 클래스 경로 설정 당신은 공급자가 실제로

+0

이것은 매우 잘 맞을 수 있습니다 만,이 문제를 해결하는 방법은 확실하지 않습니다. 컴파일 된 .war 파일을 GlassFish에 업로드하고 있으므로 Maven은 컴파일 후에 여전히 영향을 미치지 않을 것입니다. (즉, 이러한 제외 사항은 전쟁과 함께 전달되어 서버에서 사용됩니까?) – Tim

+0

응용 프로그램이 실행될 때 Metro 공급자를 선택하는 것이 개발 중이 아니라 Glassfish에 배포됩니까? – Kevin

+0

개발은 부두로 수행됩니다 .. 제외 할 GlassFish 종속성이 없습니다 .. – Tim

5

태양-web.xml에 추가로드와 클래스 = 거짓 대리자를 설정하는 방법을 볼 수 javax.xml.ws.spi.FactoryFinder#find()의 소스에서

확인을 수정할 수 있습니다 -loader :

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE sun-web-app PUBLIC '-//Sun Microsystems, Inc.//DTD 
Application Server 9.0 Servlet 2.5//EN' 
'http://www.sun.com/software/appserver/dtds/sun-web-app_2_5-0.dtd'> 
<sun-web-app> 
    <class-loader delegate="false"/> 
</sun-web-app> 
+0

이 파일을 war web-inf 디렉토리에 추가하면 효과적입니다. 감사! – sdoca

0

내가 함께했다 (그리고에 만족 오전) 솔루션 JaxWsProxyFactoryBean을 사용하는 것입니다. [여기에] 예제가 있습니다. 1.

public static void main(String args[]) throws Exception { 

    JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); 

    // I didn't need these next 2 calls, but I doubt they hurt 
    factory.getInInterceptors().add(new LoggingInInterceptor()); 
    factory.getOutInterceptors().add(new LoggingOutInterceptor()); 

    factory.setServiceClass(AuthService.class); 
    factory.setAddress("http://localhost:7001/authManager/services/cxfAuth"); 

    // 'AuthService' is whatever your interface type is 
    AuthService client = (AuthService) factory.create(); 

    Employee employee = client.getEmployee("0223938"); 
    System.out.println("Server said: " + employee.getLastName() + ", " + employee.getFirstName()); 
    System.exit(0); 

} 
+0

솔루션의 관련 부분에 복사 할 수 있습니까? 외부 링크는 시간이 지남에 따라 부서지는 경향이 있습니다. – Tim

+1

오. 잘 했어. – javamonkey79