Web services Glassfish ClassCastException WebBundleContext和EjbContext

Web services Glassfish ClassCastException WebBundleContext和EjbContext,web-services,glassfish-3,ejb-3.1,Web Services,Glassfish 3,Ejb 3.1,我一直很难将一个简单的web服务部署到GlassFish 3.1.1中,但我在部署时遇到以下异常: 原因:java.lang.ClassCastException:com.sun.enterprise.deployment.annotation.context.WebBundleContext无法强制转换为com.sun.enterprise.deployment.annotation.context.EjbContext 位于org.glassfish.webservices.annotati

我一直很难将一个简单的web服务部署到GlassFish 3.1.1中,但我在部署时遇到以下异常:

原因:java.lang.ClassCastException:com.sun.enterprise.deployment.annotation.context.WebBundleContext无法强制转换为com.sun.enterprise.deployment.annotation.context.EjbContext 位于org.glassfish.webservices.annotation.handlers.WebServiceProviderHandler.processAnnotation(WebServiceProviderHandler.java:158) 位于org.glassfish.apf.impl.AnnotationProcessorImpl.process(AnnotationProcessorImpl.java:344) ... 42多

这是我的Web服务类:

@Stateless
@WebServiceProvider(
    serviceName = "HelloWorldProviderService",
    portName = "HelloWorldProviderPort",
    targetNamespace = "http://mydomain.com/wsdl"
)
@ServiceMode(value= Service.Mode.PAYLOAD)
public class HelloWorldProvider implements Provider<Source>
{
    @Override
    public Source invoke(Source request)
    {
        StringWriter requestXmlWriter = new StringWriter();

        try
        {
            Transformer copier = TransformerFactory.newInstance().newTransformer();
            copier.transform(request, new StreamResult(requestXmlWriter));
            System.out.println(requestXmlWriter.toString());

            return new StreamSource(new StringReader("<HelloBack/>"));
        }
        catch (TransformerException e)
        {
            throw new RuntimeException("Failed to convert");
        }
    }
}
@无状态
@WebServiceProvider(
serviceName=“HelloWorldProviderService”,
portName=“HelloWorldProviderPort”,
targetNamespace=”http://mydomain.com/wsdl"
)
@ServiceMode(值=Service.Mode.PAYLOAD)
公共类HelloWorldProvider实现提供程序
{
@凌驾
公共源调用(源请求)
{
StringWriter requestXmlWriter=新建StringWriter();
尝试
{
Transformer copier=TransformerFactory.newInstance().newTransformer();
转换(请求,新的StreamResult(requestXmlWriter));
System.out.println(requestXmlWriter.toString());
返回新的StreamSource(新的StringReader(“”);
}
捕获(转换异常e)
{
抛出新的RuntimeException(“转换失败”);
}
}
}
战争布局是

|__ WEB-INF
|          |__ web.xml
|
|__ classes
|       |__ META-INF
|       |      |__ ejb-jar.xml
|       |
|       |__ <classfile>
|
|__ lib
|    |__ <empty>
| uuuuuWEB-INF
|| uuuweb.xml
|
|__班级
|| META-INF
|| | | ejb-jar.xml
|       |
|       |__ 
|
|__解放党
|    |__ 
这在我使用OpenEjb的测试环境中是有效的,但我需要它来对付GlassFish,建议会很好

多谢各位
-kurt

您正在使用NetBeans吗?我这样问是因为这是一个已知的问题,在NetBeans版本6.9中已修复。尝试升级NetBeans,看看是否适合您。

Preston感谢您的回复,我读了同一篇文章,但我使用Intellij,我所做的是从WebServiceProvider类中删除无状态,因为它在容器中,所以我对资源有引用,所以我能够使它工作。我主要感到沮丧的是,在我的测试环境(OpenEJB)中,无状态与WebServiceProvider注释一起工作,而不是在生产中的GlassFish中。我必须修改测试分支中的ejb-jar.xml,并将其声明为无状态bean,以访问OpenEJB容器中的资源。