2013-09-12 4 views
7

У меня возникла проблема с созданием и подключением клиента Java к работающей веб-службе.Ошибка веб-службы Java: com.ctc.wstx.exc.WstxEOFException: Неожиданный EOF в прологе

Я использую следующий код:

Service myService = null; 
URL wsdlLocation = new URL("http://myservice?wsdl"); 
QName serviceName = new QName(wsdlLocation, "MyService"); 
Service myService = new Service(wsdlLocation, serviceName); 

где класс службы был создан с помощью следующей команды:

wsimport -d gen -keep http://myservice?wsdl 

Я также попытался с клиентом, порожденным Apache CXF 2,4-х wsdl2java, но получил тот же результат.

(я изменил расположение WSDL и имя класса обслуживания только для этой должности, в коде я использую оригинальные.)

Но я получаю исключение, когда я звоню веб-службу развернутую на сервере приложений , при создании сервиса с помощью новой команды Service(). Но: Я тестировал местоположение wsdl с помощью SOAP UI, и он отлично работает. Кроме того, я создал Mock Service с использованием Soap UI, и мой Java-клиент мог подключиться к нему, вызвать его и вернуть результаты. Проблема возникает, когда я хочу «вызвать веб-службу, запущенную на сервере приложений».

StackTrace:

javax.xml.ws.WebServiceException: org.apache.cxf.service.factory.ServiceConstructionException: Failed to create service. 
     at org.apache.cxf.jaxws.ServiceImpl.<init>(ServiceImpl.java:149) 
     at org.apache.cxf.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:98) 
     at javax.xml.ws.Service.<init>(Service.java:76) 
     at MyService.<init>(MyService.java:42) 
     at mypackage.createService(AClass.java:288) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:616) 
Caused by: org.apache.cxf.service.factory.ServiceConstructionException: Failed to create service. 
     at org.apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.java:100) 
     at org.apache.cxf.jaxws.ServiceImpl.initializePorts(ServiceImpl.java:199) 
     at org.apache.cxf.jaxws.ServiceImpl.<init>(ServiceImpl.java:147) 
     ... 12 more 
Caused by: javax.wsdl.WSDLException: WSDLException: faultCode=PARSER_ERROR: com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog 
at [row,col,system-id]: [1,0,"http://myservice?wsdl"] 
     at org.apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.java:256) 
     at org.apache.cxf.wsdl11.WSDLManagerImpl.getDefinition(WSDLManagerImpl.java:205) 
     at org.apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.java:98) 
     ... 14 more 
Caused by: com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog 
at [row,col,system-id]: [1,0,"http://myservice?wsdl"] 
     at com.ctc.wstx.sr.StreamScanner.throwUnexpectedEOF(StreamScanner.java:677) 
     at com.ctc.wstx.sr.BasicStreamReader.handleEOF(BasicStreamReader.java:2139) 
     at com.ctc.wstx.sr.BasicStreamReader.nextFromProlog(BasicStreamReader.java:2045) 
     at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1134) 
     at org.apache.cxf.staxutils.StaxUtils.readDocElements(StaxUtils.java:1248) 
     at org.apache.cxf.staxutils.StaxUtils.readDocElements(StaxUtils.java:1142) 
     at org.apache.cxf.staxutils.StaxUtils.read(StaxUtils.java:1069) 
     at org.apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.java:247) 
     ... 16 more 

Может кто-то пожалуйста, помогите мне?

+0

Вы можете поделиться своим WSDL? Вы используете привязку rpc? – herry

+0

Вы решили эту проблему? Я получаю ту же ошибку ... –

+0

Решили ли вы эту проблему? Я получаю ту же ошибку ... –

ответ

2

Я помню, что читал, что это может быть связано с конечной точкой, ожидающей конечную «/». Я не уверен, что это действительно, но, пожалуйста, попробуйте и опубликуйте здесь, если это работает.

1

У меня была аналогичная ошибка, и когда я проверил журналы сервера - она ​​была связана с http-сервером, столкнувшимся с неподдерживаемым методом http в запросе, возвращает HTTP-ответ, который клиент SOAP не может обработать ... проверьте журналы своего веб-сервера

1

У меня была аналогичная ошибка, и когда я проверял журналы сервера - это было связано с тем, что HTTP-сервер столкнулся с неподдерживаемым методом http в запросе. В связи с этим Teh сервер возвращает ответ HTTP, что клиент SOAP не может справиться ... поэтому Неожиданный конец файл в прологе Ниже приведен фрагмент моего журнал веб-сервере для кота «localhost.XXXX.log»

org.apache.tomcat.util.descriptor.web.SecurityConstraint.findUncoveredHttpMethods For security constraints with URL pattern [/services/*] only the HTTP methods [POST GET] are covered. All other methods are uncovered. 

Это дал следующую ошибку на стороне клиента

com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog 

В моем случае, так как я был понижая обеспеченного обслуживания необеспеченного и мой web.xml был следующий паразитной записью, которая была ограничивающей и опубликовать с ограничением безопасности, и я не был посылать необходимую безопасность параметров в запросе.

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>restricted web services</web-resource-name> 
      <url-pattern>/services/*</url-pattern> 
      <http-method>GET</http-method> 
      <http-method>POST</http-method> 
     </web-resource-collection> 

Я снял это ограничение, чтобы избавиться от этой ошибки :-)

В вашем случае это не связано с ограничением безопасности - но уверен, что его отношение к серверу представляемого необработанный ответ HTTP - Пожалуйста, проверьте ваш сервер/клиента и обеспечить его отправку соответствующего HTTP-запроса, который нравится http-серверу

0

Я столкнулся с этой ошибкой и обнаружил, что это связано с использованием URL-адреса, который напрямую перенаправлял HTTP 302 вместо WSDL.

URL, который я использовал, был в формате /Service?wsdl, который перенаправлялся на URL-адрес в формате /Service/wsdl/Service.wsdl. Как только я напрямую перенаправил целевой URL-адрес, все сработало.

0

Один из них отсутствует. Проверьте маршруты на свои xsd.

0

Несомненно, это не из-за проблемы с символом или форматом. Возможно, сервер не возвратил никаких данных, из которых Woodstox (wstx) пытался разобрать в XML и не удалось, что привело к этой ошибке.

+0

Этот сценарий произошел снова в другом проекте, и я мог подтвердить, что он из-за пустых данных. И когда Woodstox пытается разобрать его, это сообщение об ошибке создается. Доказательство: ошибка stacktrace всегда показывает это местоположение 'at [row, col, system-id]: [1,0' –

0

У меня была та же проблема. Мне пришлось использовать полный путь к файлу WSDL, чтобы он работал.

Смежные вопросы