응용 프로그램 내부에서 호출하려고하는 SOAP 웹 서비스가 있습니다. 나는 cxf-codegen-plugin (3.1.10)을 사용하여 WSDL에서 소스를 생성한다.ClassCastException : com.sun.xml.internal.bind.v2.runtime.reflect.Accessor로 캐스팅 할 수 없습니다.
생성 된 클라이언트를 사용하여 응용 프로그램 내에서 웹 서비스를 호출하면 멋지게 작동합니다. 그러나 문제를 일으키는 응용 프로그램 내에서 동일한 패키지에 대해 다른 JAXB 인스턴스를 사용하고 있습니다. 바로 전에 새로운 JAXB 인스턴스를 초기화 그러나
OutboundServicePortType service = new OutboundService().getOutboundServicePort();
service.sendMessage(message);
을 실패 할 getOutboundServicePort()
전화를 발생합니다 :
는 예를 들어, 다음은 좋은 작품
다음 스택 트레이스와JAXBContext.newInstance(SendMessageRequest.class);
OutboundServicePortType service = new OutboundService().getOutboundServicePort();
service.sendMessage(message);
Caused by: java.lang.ClassCastException: outbound.model.standard.StandardOutboundMessage$JaxbAccessorF_messageUUId cannot be cast to com.sun.xml.internal.bind.v2.runtime.reflect.Accessor
at com.sun.xml.internal.bind.v2.runtime.reflect.opt.OptimizedAccessorFactory.instanciate(OptimizedAccessorFactory.java:190)
at com.sun.xml.internal.bind.v2.runtime.reflect.opt.OptimizedAccessorFactory.get(OptimizedAccessorFactory.java:179)
at com.sun.xml.internal.bind.v2.runtime.reflect.Accessor$FieldReflection.optimize(Accessor.java:271)
at com.sun.xml.internal.bind.v2.runtime.property.SingleElementLeafProperty.<init>(SingleElementLeafProperty.java:77)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
at com.sun.xml.internal.bind.v2.runtime.property.PropertyFactory.create(PropertyFactory.java:113)
at com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.<init>(ClassBeanInfoImpl.java:166)
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getOrCreate(JAXBContextImpl.java:488)
at com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.<init>(ClassBeanInfoImpl.java:153)
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getOrCreate(JAXBContextImpl.java:488)
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:305)
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:124)
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1123)
at com.sun.xml.internal.bind.v2.ContextFactory.createContext(ContextFactory.java:147)
at com.sun.xml.internal.bind.api.JAXBRIContext.newInstance(JAXBRIContext.java:152)
at com.sun.xml.internal.bind.api.JAXBRIContext.newInstance(JAXBRIContext.java:96)
at com.sun.xml.internal.ws.developer.JAXBContextFactory$1.createJAXBContext(JAXBContextFactory.java:98)
at com.sun.xml.internal.ws.db.glassfish.JAXBRIContextFactory.newContext(JAXBRIContextFactory.java:79)
... 25 more
내가 지금까지 시도한 것들 :
-
JAXB classes from Webservice marshalling error
내 JDK 폴더에는 승인 항아리가 없기 때문에 this answer는 JAXB 프로 - IMPL 항아리 (2.2.11가)에서 오는
- 그것 때문에 내 응용 프로그램에서 낙타 - JAXB 적용되지 않습니다 매우 포함 된 것 같아서 this answer가 아니라고 제안합니다.
- This answer은 문제를 잘 설명하는 것으로 보이지만 해결 방법은 나에게 불확실한 것으로 보입니다. Problems creating JAXBContext to marshal object as XML
이 질문에 내 동일 보이지만,이 솔루션은 그들이
- 나는 받아 들인 해결책을 시도했다
System.setProperty("com.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize", "true");
어느 은 일을합니다. 그러나이 환경을 설정하는 것은 불행히도 내 환경에서 나를위한 옵션이 아닙니다. 또한, 실제 문제를 다루지 않는 약간의 해킹 인 것 같습니다 (오해가 아닌 한).
내가 남긴 작은 밧줄로 몸을 지키려고합니다. 내가 여기서 무엇을 놓치고 있니?
답변을 드릴 수는 없지만 링크 된 이해할 수없는 답변에 의해 암시 된 두 개의 클래스 로더처럼 들립니다. 또한 나는 그 noOptimize 옵션에 관한 최소한의 정보를 파헤 칠 수 있었다 : http://cxf.547215.n5.nabble.com/JAXB-is-not-sitting-well-in-an-OSGI -eclipse-env-tp569834p569839.html, jaxb가 정말 이상한 일을하는 것 같아요. 당신이 뭘하고 있는지 확신 할 수 없기 때문에 문제가 발생했습니다. 대답을 얻고 싶습니다. Btw는 jaxb 사용자 메일 링리스트에 아무것도 나타나지 않는지 물어보십시오. –