2012-03-19 2 views
3

웹 서비스를 실행하는 데 사용하는 Tomcat 7.0 웹 서버가 있습니다. 웹 서비스 프레임 워크는 CXF 2.5.2입니다.웹 서버 형식이 잘못되었습니다 .wsdl

Eclipse Web Service Explorer에서 웹 서비스를 테스트 할 때 모든 것이 정상적으로 작동합니다.

Exception in thread "main" javax.xml.ws.WebServiceException: org.apache.cxf.service.factory.ServiceConstructionException: Failed to create service. 
at org.apache.cxf.jaxws.ServiceImpl.<init>(ServiceImpl.java:150) 
at org.apache.cxf.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:91) 
at javax.xml.ws.Service.<init>(Service.java:77) 
at test.Test_Service.<init>(Test_Service.java:43) 
at test.Test_TestSOAP_Client.main(Test_TestSOAP_Client.java:47) 

Caused by: org.apache.cxf.service.factory.ServiceConstructionException: Failed to create service. 
at org.apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.java:94) 
at org.apache.cxf.jaxws.ServiceImpl.initializePorts(ServiceImpl.java:204) 
at org.apache.cxf.jaxws.ServiceImpl.<init>(ServiceImpl.java:148) 
... 4 more 

Caused by: javax.wsdl.WSDLException: WSDLException: faultCode=PARSER_ERROR: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character 'c' (code 99) in start tag Expected a quote at [row,col,system-id]: [1,208,"http://www.example.com:8081/TestWS/services?wsdl"] 
at org.apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.java:240) 
at org.apache.cxf.wsdl11.WSDLManagerImpl.getDefinition(WSDLManagerImpl.java:191) 
at org.apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.java:92) 
... 6 more 

Caused by: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character 'c' (code 99) in start tag Expected a quote at [row,col,system-id]: [1,208,"http://www.example.com:8081/TestWS/services?wsdl"] 
at com.ctc.wstx.sr.StreamScanner.throwUnexpectedChar(StreamScanner.java:639) 
at com.ctc.wstx.sr.BasicStreamReader.handleNsAttrs(BasicStreamReader.java:3005) 
at com.ctc.wstx.sr.BasicStreamReader.handleStartElem(BasicStreamReader.java:2926) 
at com.ctc.wstx.sr.BasicStreamReader.nextFromTree(BasicStreamReader.java:2802) 
at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1050) 
at org.apache.cxf.staxutils.StaxUtils.readDocElements(StaxUtils.java:1080) 
at org.apache.cxf.staxutils.StaxUtils.readDocElements(StaxUtils.java:974) 
at org.apache.cxf.staxutils.StaxUtils.read(StaxUtils.java:901) 
at org.apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.java:231) 
... 8 more 

은 흥미로운 부분은 Unexpected character 'c' (code 99) in start tag Expected a quote at [row,col,system-id]: [1,208,"http://www.example.com:8081/TestWS/services?wsdl"] 메시지 있어야한다 : 서비스 구현에서 super(wsdlLocation, serviceName)를 호출 할 때 WSDL에서 자바 클라이언트를 생성 할 때, (Eclipse를 사용)하고 그것을 실행, 나는 다음과 같은 오류가 발생합니다.

<meta http-equiv=content-type content="text/html; charset=UTF-8"> 

content-type는 일반적으로 따옴표로 포장해야합니다 생성 된 services.wsdl을 검사 할 때, 나는 문제가 메타 부분에 있음을 발견했다. 사용 된 프레임 워크/서버 중 하나에서 알려진 버그입니까? 이 문제를 해결하려면 어떻게해야합니까? Eclipse Web Services Explorer를 사용할 때 왜 아무런 문제가 없습니까? 더 내결함성이 있습니까? (Firefox가 생성 된 wsdl의 그래픽 표현을 표시하는 데 문제가없는 것처럼 보입니다).

답변

1

발견. 실수로 http://www.example.com:8081/TestWS/services/MyTestWS 대신 http://www.example.com:8081/TestWS/services으로 WSDL 끝점을 지정했습니다. 따라서 자동으로 생성 된 클라이언트는 실제 WSDL을 반환하는 http://www.example.com:8081/TestWS/services/MyTestWS?wsdl 대신에 HTML 페이지를 반환하는 http://www.example.com:8081/TestWS/services?wsdl에서 WSDL을 가져 오려고했습니다.

1

이것은 CXF 서비스 목록 생성과 관련된 문제/버그처럼 보입니다. (라인 (52) 주위) org.apache.cxf.transport.servlet.servicelist.FormattedServiceListWriter 자료 :

writer.write("<meta http-equiv=content-type content=\"text/html; charset=UTF-8\">"); 

http-equiv 인용되지 않은 값이다. 따라서 다른 도구에는 문제가 없습니다. 왜냐하면 이러한 도구는 추측 해본대로 "내결함성"을 갖추고 있기 때문입니다.

com.ctc.wstx.* 클래스는 유효성 검사가 발생하고 오류가 발생하는 곳인 것처럼 잘 모르겠습니다. 그것이 당신이 통제 할 수있는 것이라면, (일시적인) 일은 HTMLTidy를 서비스 목록 페이지에서 실행하는 것일 수 있습니다.

CXF 메일 목록에 언급 할 가치가 있거나 버그를 제기 할 가치가 있습니까?

+0

방금 ​​CXF 메일 링리스트로 전달했습니다. 여기에 업데이트를 게시합니다. 'com.ctc.wstx'는 우드 스탁 XML 프로세서 인 것 같습니다. 그것은 내가 제어 할 수있는 건 아니지만 ... – ubuntudroid

+0

문제를 발견, 내 대답을 참조하십시오. – ubuntudroid

3

서비스 목록 페이지는 서비스를 나열하고 해당 서비스에 대한 적절한 WSDL 문서 (또는 나머지 기반 서비스에 대한 WADL 문서)에 대한 링크를 제공하는 HTML 페이지입니다. WSDL 문서가 아닙니다. WSDL로 파싱하면 작동하지 않습니다.

+0

글쎄, 우리가 얘기하는 파일은 WSDL을 리턴해야하는'http : //www.example.com : 8081/TestWS/services? wsdl'에서 가져온 것이 아닌가? – ubuntudroid

+0

문제점을 찾았습니다. 제 답변을 참조하십시오. – ubuntudroid

0

예전에 같은 예외를 가지고 있으며, 오류가 시작 태그에 org.jboss.deployment.DeploymentException: Unexpected character 'c' (code 99) 다음과 같은 몇 가지가를 예상했다 destination-name=closeTaskService

수정 destination-name="closeTaskService"이었다 내가 doule 따옴표를 잃어버린 한 곳 .. 예에서 구성 파일에 있기 때문에이었다 견적

관련 문제