2016-01-25 7 views
0

Моя фактическая проблема - это вывод названия, но название является основной причиной моей проблемы:Почему нельзя использовать GenericArrayTypeImpl для java.lang.Class в java 6, когда это возможно в java 7?

Я разрабатываю веб-приложение java на работе. Сервер, на который мое приложение будет развернуто, принимает только java 6 или ниже (WebLogic 10.3.2)

Мне нужно вызвать веб-службу в своем приложении. Мой опыт в этой области ограничен. Я был в состоянии сделать его работу, но когда я интегрирован мой код в веб-приложения, скомпилированные и протестировали его, я получил эту ошибку:

Exception in thread "main" java.lang.ClassCastException: sun.reflect.generics.reflectiveObjects.GenericArrayTypeImpl cannot be cast to java.lang.Class 
    at com.sun.xml.internal.bind.v2.model.impl.RuntimeModelBuilder.createArrayInfo(Unknown Source) 
    at com.sun.xml.internal.bind.v2.model.impl.RuntimeModelBuilder.createArrayInfo(Unknown Source) 
    at com.sun.xml.internal.bind.v2.model.impl.ModelBuilder.getTypeInfo(Unknown Source) 
    at com.sun.xml.internal.bind.v2.model.impl.ElementInfoImpl.<init>(Unknown Source) 
    at com.sun.xml.internal.bind.v2.model.impl.RuntimeElementInfoImpl.<init>(Unknown Source) 
    at com.sun.xml.internal.bind.v2.model.impl.RuntimeModelBuilder.createElementInfo(Unknown Source) 
    at com.sun.xml.internal.bind.v2.model.impl.RuntimeModelBuilder.createElementInfo(Unknown Source) 
    at com.sun.xml.internal.bind.v2.model.impl.RegistryInfoImpl.<init>(Unknown Source) 
    at com.sun.xml.internal.bind.v2.model.impl.ModelBuilder.addRegistry(Unknown Source) 
    at com.sun.xml.internal.bind.v2.model.impl.ModelBuilder.getTypeInfo(Unknown Source) 
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(Unknown Source) 
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(Unknown Source) 
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(Unknown Source) 
    at com.sun.xml.internal.bind.v2.ContextFactory.createContext(Unknown Source) 
    at com.sun.xml.internal.bind.api.JAXBRIContext.newInstance(Unknown Source) 
    at com.sun.xml.internal.ws.developer.JAXBContextFactory$1.createJAXBContext(Unknown Source) 
    at com.sun.xml.internal.ws.model.AbstractSEIModelImpl$1.run(Unknown Source) 
    at com.sun.xml.internal.ws.model.AbstractSEIModelImpl$1.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.xml.internal.ws.model.AbstractSEIModelImpl.createJAXBContext(Unknown Source) 
    at com.sun.xml.internal.ws.model.AbstractSEIModelImpl.postProcess(Unknown Source) 
    at com.sun.xml.internal.ws.model.RuntimeModeler.buildRuntimeModel(Unknown Source) 
    at com.sun.xml.internal.ws.client.WSServiceDelegate.createSEIPortInfo(Unknown Source) 
    at com.sun.xml.internal.ws.client.WSServiceDelegate.addSEI(Unknown Source) 
    at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(Unknown Source) 
    at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(Unknown Source) 
    at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(Unknown Source) 
    at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(Unknown Source) 
    at javax.xml.ws.Service.getPort(Unknown Source) 
    at com.example.mypackage.MyClient.invokeService(MyClient.java:64) 
    at Test.main(Test.java:7) 

Я проследили эту ошибку снова стать проблемой ява версии. Он работает в 7, но исключение бросается на выполнение метода, если я скомпилирую в 6, что я должен сделать для веб-приложения. Линия, на которой брошено мое исключение, это один с NotificationRecieverSoapInterface.class ниже:

NotifikationRecieverSoap service = null; 
    try { 
     service = new NotifikationRecieverSoap(new URL("[myURL].svc?wsdl")); 
    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } 
    NotificationRecieverSoapInterface notificationService = service.getPort(NotificationRecieverSoapInterface.class); 
    notifikationService.createNotificationRequest(logHeader, loginModule, parmV, priority, recipients); 

Service.getPort() -метод кажется идентичным в двух версиях Java, так что я в недоумении там. sun.reflect.generics.reflectiveObjects.GenericArrayTypeImpl также идентичны в 6 и 7.

Ближайшая вещь, с которой я столкнулся с подобной проблемой в Интернете, была следующая: http://forum.spring.io/forum/spring-projects/container/26020-classcastexception-genericarraytypeimpl-cannot-be-cast-to-class. К сожалению, решение здесь состояло в том, что весной была ошибка, которую я не использую ...

Кто-нибудь знает более конкретно, что моя проблема, и если ее можно обойти, используя только Java 6?

У меня есть намного больше кода для показа. Я выбрал те части, которые, по моему мнению, наиболее актуальны для этой проблемы. Я могу предоставить классы, создаваемые jax-ws для структуры данных, а также образцы xml, по запросу.

+0

Делитесь информацией об отладке, когда вы устанавливаете точку останова в своей среде IDE. Это покажет нам лучший контекст – Woot4Moo

+0

Хороший план. Я доберусь до него – KjetilNordin

+0

@ Woot4Moo ... Пока не повезло. Я борюсь с источниками и javadocs в моей настройке maven. Я не становлюсь ближе к поиску отладочных данных, когда останавливает строки, которые выдают исключения из моего собственного кода ... – KjetilNordin

ответ

0

Хорошо ... Я использовал этот метод для создания классов веб-служб: http://www.mkyong.com/webservices/jax-ws/jax-ws-wsimport-tool-example/

я понял, что я использовал 1,7 JDK при вызове wsimport.exe. Это было несовместимо с моим проектом 1.6. После восстановления классов с помощью wsimport.exe, найденного в правильном JDK 1.6, классы java немного отличались и совместимы с настройкой моего проекта.