当前位置首页 > Apache知识

java.lang.IllegalArgumentException:Noenumconstantorg.apache.ws.c

阅读次数:319 次  来源:admin  发布时间:

一次系统断电维护之后,apache cxf 的 web service 接口调用一直报错:

java.lang.IllegalArgumentException: No enum constant org.apache.ws.commons.schema.XmlSchemaForm.

at java.lang.Enum.valueOf(Unknown Source)

at org.apache.ws.commons.schema.EnumUtil.valueOf(EnumUtil.java:33)

at org.apache.ws.commons.schema.XmlSchemaForm.schemaValueOf(XmlSchemaForm.java:32)

at org.apache.ws.commons.schema.SchemaBuilder.getFormDefault(SchemaBuilder.java:181)

at org.apache.ws.commons.schema.SchemaBuilder.handleSchemaElementBasics(SchemaBuilder.java:1489)

at org.apache.ws.commons.schema.SchemaBuilder.handleXmlSchemaElement(SchemaBuilder.java:649)

at org.apache.ws.commons.schema.XmlSchemaCollection.read(XmlSchemaCollection.java:540)

at org.apache.cxf.common.xmlschema.SchemaCollection.read(SchemaCollection.java:129)

at org.apache.cxf.wsdl11.SchemaUtil.extractSchema(SchemaUtil.java:140)

at org.apache.cxf.wsdl11.SchemaUtil.getSchemas(SchemaUtil.java:73)

at org.apache.cxf.wsdl11.SchemaUtil.getSchemas(SchemaUtil.java:65)

at org.apache.cxf.wsdl11.SchemaUtil.getSchemas(SchemaUtil.java:60)

at org.apache.cxf.wsdl11.WSDLServiceBuilder.getSchemas(WSDLServiceBuilder.java:372)

at org.apache.cxf.wsdl11.WSDLServiceBuilder.buildServices(WSDLServiceBuilder.java:339)

at org.apache.cxf.wsdl11.WSDLServiceBuilder.buildServices(WSDLServiceBuilder.java:203)

at org.apache.cxf.wsdl11.WSDLServiceFactory.create(WSDLServiceFactory.java:175)

at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServiceFromWSDL(ReflectionServiceFactoryBean.java:428)

at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:548)

at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:265)

at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(JaxWsServiceFactoryBean.java:215)

at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:102)

at org.apache.cxf.frontend.ClientFactoryBean.create(ClientFactoryBean.java:91)

at org.apache.cxf.frontend.ClientProxyFactoryBean.create(ClientProxyFactoryBean.java:157)

at org.apache.cxf.jaxws.JaxWsProxyFactoryBean.create(JaxWsProxyFactoryBean.java:142)

at org.apache.cxf.jaxws.ServiceImpl.createPort(ServiceImpl.java:478)

at org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:345)

at org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:336)

at javax.xml.ws.Service.getPort(Unknown Source)

at cn.com.xxxx.PTService.getPTServiceHttpSoap11Endpoint(PTService.java:72)

这个错误很奇特:

java.lang.IllegalArgumentException: No enum constant org.apache.ws.commons.schema.XmlSchemaForm.

at java.lang.Enum.valueOf(Unknown Source)

at org.apache.ws.commons.schema.EnumUtil.valueOf(EnumUtil.java:33)

XmlSchemaForm. 这里 点 . 后面 是空的?????

尼玛啥意思。。。

原因应该是传给 Enum.valueOf 方法的参数有问题( java.lang.Enum.valueOf(Unknown Source)),导致报错了。

最后 定位到 jar包:xmlschema-core-2.1.0.jar ,查看源码:

public enum XmlSchemaForm {
    NONE,
    QUALIFIED,
    UNQUALIFIED;
    
    public static XmlSchemaForm schemaValueOf(String name) {
        return EnumUtil.valueOf(XmlSchemaForm.class, name);
    }

    @Override
    public String toString() {
        switch (this) {
        case QUALIFIED:
            return "qualified";
        case UNQUALIFIED:
            return "unqualified";
        }
        return "none";
    }
}

所以 org.apache.ws.commons.schema.XmlSchemaForm. 可能应该是 org.apache.ws.commons.schema.XmlSchemaForm.NONE

把 2.1.0 换成最新的 xmlschema-core-2.2.3.jar,测试通过。不再报错。

具体什么原因还是没有查清楚,不过问题解决了。记录一下。

上一篇:fedora18Couldnotloadfirmwarexc3028-v27
下一篇:阿里云ECS服务器(ubuntu)下基本配置以及升级git