2012-04-23 16 views
15

Tôi đang cố gắng gửi một số thực thể đến dịch vụ web dựa trên ejb. Đây là web mã dịch vụ khách hàng của tôi:Cũng không phải bất kỳ siêu lớp nào của nó được biết đến trong ngữ cảnh này

package ejbserviceclient; 

import java.net.MalformedURLException; 
import java.net.URL; 
import javax.xml.bind.JAXBContext; 
import javax.xml.bind.JAXBException; 
import javax.xml.namespace.QName; 
import javax.xml.ws.Service; 

public class EjbServiceClient { 

    public static void main(String[] args) throws MalformedURLException, JAXBException { 

    JAXBContext context = JAXBContext.newInstance(EjbServiceClient.class); 


    URL url = new URL("http://ipsedin:8080/WebServiceBeanService/WebServiceBean?wsdl"); 
    QName serviceName = new QName(
      "http://ejb.rpt.softcomputer.com/", 
      "WebServiceBeanService"); 
    QName portName = new QName(
      "http://ejb.rpt.softcomputer.com/", 
      "WebServiceBeanPort"); 

    Service service = Service.create(url, serviceName); 
    Echo ejbService = service.getPort(portName, Echo.class); 

    System.out.println(ejbService.echo("lololo")); 
    System.out.println(ejbService.processExCourse(new ExCourse())); 

    } 
} 

Và đây là thực thể:

package ejbserviceclient; 

import javax.xml.bind.annotation.XmlRootElement; 

@XmlRootElement 
public class ExCourse { 

int id; 

} 

Nhưng có ngoại lệ:

Exception in thread "main" javax.xml.ws.WebServiceException: javax.xml.bind.MarshalException 
- with linked exception: 
[javax.xml.bind.JAXBException: class ejbserviceclient.ExCourse nor any of its super class is known to this context.] 
    at com.sun.xml.internal.ws.message.jaxb.JAXBMessage.writePayloadTo(JAXBMessage.java:318) 
    at com.sun.xml.internal.ws.message.AbstractMessageImpl.writeTo(AbstractMessageImpl.java:131) 
    at com.sun.xml.internal.ws.encoding.StreamSOAPCodec.encode(StreamSOAPCodec.java:98) 
    at com.sun.xml.internal.ws.encoding.SOAPBindingCodec.encode(SOAPBindingCodec.java:249) 
    at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:144) 
    at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:83) 
    at com.sun.xml.internal.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:78) 
    at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Fiber.java:587) 
    at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Fiber.java:546) 
    at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Fiber.java:531) 
    at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Fiber.java:428) 
    at com.sun.xml.internal.ws.client.Stub.process(Stub.java:211) 
    at com.sun.xml.internal.ws.client.sei.SEIStub.doProcess(SEIStub.java:124) 
    at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:98) 
    at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78) 
    at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:107) 
    at $Proxy19.processExCourse(Unknown Source) 
    at ejbserviceclient.EjbServiceClient.main(EjbServiceClient.java:30) 
Caused by: javax.xml.bind.MarshalException 
- with linked exception: 
[javax.xml.bind.JAXBException: class ejbserviceclient.ExCourse nor any of its super class is known to this context.] 
    at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:268) 
    at com.sun.xml.internal.bind.v2.runtime.BridgeImpl.marshal(BridgeImpl.java:89) 
    at com.sun.xml.internal.bind.api.Bridge.marshal(Bridge.java:130) 
    at com.sun.xml.internal.ws.message.jaxb.JAXBMessage.writePayloadTo(JAXBMessage.java:310) 
    ... 17 more 
Caused by: javax.xml.bind.JAXBException: class ejbserviceclient.ExCourse nor any of its super class is known to this context. 
    at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer.java:214) 
    at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer.java:229) 
    at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:621) 
    at com.sun.xml.internal.bind.v2.runtime.BridgeImpl.marshal(BridgeImpl.java:136) 
    at com.sun.xml.internal.bind.v2.runtime.CompositeStructureBeanInfo.serializeBody(CompositeStructureBeanInfo.java:96) 
    at com.sun.xml.internal.bind.v2.runtime.CompositeStructureBeanInfo.serializeBody(CompositeStructureBeanInfo.java:44) 
    at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:664) 
    at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:263) 
    ... 20 more 
Caused by: javax.xml.bind.JAXBException: class ejbserviceclient.ExCourse nor any of its super class is known to this context. 
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getBeanInfo(JAXBContextImpl.java:554) 
    at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:616) 
    ... 25 more 
Java Result: 1 
+2

Một bức tường của mã, mã nhiều hơn một chút và một bức tường của lỗi. Bạn bỏ lỡ phần văn bản cần thiết giải thích những gì đang cố gắng làm và những gì sai ... – Jasper

Trả lời

31

Dường như bạn đã không được khởi tạo JAXBContext của bạn một cách chính xác. Bạn cần thông báo cho tất cả các tên lớp có thể là @XmlRootElement có khả năng được phân tích cú pháp.

Vì vậy bạn cần phải thay đổi

JAXBContext context = JAXBContext.newInstance(EjbServiceClient.class) 

để

JAXBContext context = JAXBContext.newInstance(ejbserviceclient.ExCourse.class) 
+3

Oh cảm ơn bạn rất nhiều! Tôi chắc chắn rằng tôi sẽ về nhà vào cuối tuần với vấn đề chưa được giải quyết và sau đó tôi tìm thấy câu trả lời của bạn! :) Ước gì tôi có thể upvote hai lần. – Moyshe

Các vấn đề liên quan