Java Cxf重用已经生成了jaxb类

Java Cxf重用已经生成了jaxb类,java,jaxb,cxf,Java,Jaxb,Cxf,我确实有一个wsdl文件,它已经使用了我们项目中现有的xsd(因此生成的Jaxb类也在这个项目中) 我查阅了如何重用jaxb类,发现了以下内容: 因此,我做了以下工作: xjc-d out-eposion My.xsd-p wsdl2java-p-client xjc-b-fe jaxws21 My.wsdl 现在我想用JaxWsProxyFactoryBean测试此服务: JaxWsProxyFactoryBean factory = new org.apache.cxf.jaxws.

我确实有一个wsdl文件,它已经使用了我们项目中现有的xsd(因此生成的Jaxb类也在这个项目中)

我查阅了如何重用jaxb类,发现了以下内容:

因此,我做了以下工作:

  • xjc-d out-eposion My.xsd-p
  • wsdl2java-p-client xjc-b-fe jaxws21 My.wsdl
  • 现在我想用JaxWsProxyFactoryBean测试此服务:

        JaxWsProxyFactoryBean factory = new org.apache.cxf.jaxws.JaxWsProxyFactoryBean();
        factory.setServiceClass(servicClass);
        factory.setAddress(url);
        factory.setUsername(user);
        factory.setPassword(password);
        Object messageHandler = factory.create();
        Client client = ClientProxy.getClient(messageHandler);    
    
    在创建客户端时,我遇到了我不理解的异常:

       java.lang.IllegalArgumentException: can't parse argument number ''{0}''
    at java.text.MessageFormat.makeFormat(MessageFormat.java:1339)[:1.6.0_25]
    at java.text.MessageFormat.applyPattern(MessageFormat.java:458)[:1.6.0_25]
    at java.text.MessageFormat.<init>(MessageFormat.java:350)[:1.6.0_25]
    at java.text.MessageFormat.format(MessageFormat.java:811)[:1.6.0_25]
    at com.sun.xml.bind.v2.model.impl.Messages.format(Messages.java:133)[jaxb-impl-2.2.5-2.jar:2.2.5-2]
    at com.sun.xml.bind.v2.model.impl.TypeInfoSetImpl.add(TypeInfoSetImpl.java:306)[jaxb-impl-2.2.5-2.jar:2.2.5-2]
    at com.sun.xml.bind.v2.model.impl.RegistryInfoImpl.<init>(RegistryInfoImpl.java:121)[jaxb-impl-2.2.5-2.jar:2.2.5-2]
    at com.sun.xml.bind.v2.model.impl.ModelBuilder.addRegistry(ModelBuilder.java:362)[jaxb-impl-2.2.5-2.jar:2.2.5-2]
    at com.sun.xml.bind.v2.model.impl.ModelBuilder.getTypeInfo(ModelBuilder.java:332)[jaxb-impl-2.2.5-2.jar:2.2.5-2]
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:460)[jaxb-impl-2.2.5-2.jar:2.2.5-2]
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:298)[jaxb-impl-2.2.5-2.jar:2.2.5-2]
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:141)[jaxb-impl-2.2.5-2.jar:2.2.5-2]
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1163)[jaxb-impl-2.2.5-2.jar:2.2.5-2]
    at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:145)[jaxb-impl-2.2.5-2.jar:2.2.5-2]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)[:1.6.0_25]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)[:1.6.0_25]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)[:1.6.0_25]
    at java.lang.reflect.Method.invoke(Method.java:597)[:1.6.0_25]
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:202)[:1.6.0_25]
    at javax.xml.bind.ContextFinder.find(ContextFinder.java:363)[:1.6.0_25]
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:574)[:1.6.0_25]
    at org.apache.cxf.common.jaxb.JAXBContextCache$2.run(JAXBContextCache.java:267)[cxf-api-2.7.4.jar:2.7.4]
    at org.apache.cxf.common.jaxb.JAXBContextCache$2.run(JAXBContextCache.java:265)[cxf-api-2.7.4.jar:2.7.4]
    at java.security.AccessController.doPrivileged(Native Method)[:1.6.0_25]
    at org.apache.cxf.common.jaxb.JAXBContextCache.createContext(JAXBContextCache.java:265)[cxf-api-2.7.4.jar:2.7.4]
    at org.apache.cxf.common.jaxb.JAXBContextCache.getCachedContextAndSchemas(JAXBContextCache.java:172)[cxf-api-2.7.4.jar:2.7.4]
    at org.apache.cxf.jaxb.JAXBDataBinding.createJAXBContextAndSchemas(JAXBDataBinding.java:464)[cxf-rt-databinding-jaxb-2.7.4.jar:2.7.4]
    at org.apache.cxf.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:330)[cxf-rt-databinding-jaxb-2.7.4.jar:2.7.4]
    at org.apache.cxf.service.factory.AbstractServiceFactoryBean.initializeDataBindings(AbstractServiceFactoryBean.java:86)[cxf-rt-core-2.7.4.jar:2.7.4]
    at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServiceFromClass(ReflectionServiceFactoryBean.java:478)[cxf-rt-core-2.7.4.jar:2.7.4]
    at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.buildServiceFromClass(JaxWsServiceFactoryBean.java:690)[cxf-rt-frontend-jaxws-2.7.4.jar:2.7.4]
    at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:540)[cxf-rt-core-2.7.4.jar:2.7.4]
    at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:252)[cxf-rt-core-2.7.4.jar:2.7.4]
    at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(JaxWsServiceFactoryBean.java:205)[cxf-rt-frontend-jaxws-2.7.4.jar:2.7.4]
    at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:102)[cxf-rt-frontend-simple-2.7.4.jar:2.7.4]
    at org.apache.cxf.frontend.ClientFactoryBean.create(ClientFactoryBean.java:90)[cxf-rt-frontend-simple-2.7.4.jar:2.7.4]
    at org.apache.cxf.frontend.ClientProxyFactoryBean.create(ClientProxyFactoryBean.java:156)[cxf-rt-frontend-simple-2.7.4.jar:2.7.4]
    at org.apache.cxf.jaxws.JaxWsProxyFactoryBean.create(JaxWsProxyFactoryBean.java:156)[cxf-rt-frontend-jaxws-2.7.4.jar:2.7.4]
    
    java.lang.IllegalArgumentException:无法分析参数编号“{0}”
    在java.text.MessageFormat.makeFormat(MessageFormat.java:1339)[:1.6.0_25]
    在java.text.MessageFormat.applyPattern(MessageFormat.java:458)[:1.6.0_25]
    在java.text.MessageFormat.(MessageFormat.java:350)[:1.6.0_25]
    在java.text.MessageFormat.format(MessageFormat.java:811)[:1.6.0_25]
    在com.sun.xml.bind.v2.model.impl.Messages.format(Messages.java:133)[jaxb-impl-2.2.5-2.jar:2.2.5-2]
    在com.sun.xml.bind.v2.model.impl.TypeInfoSetImpl.add(TypeInfoSetImpl.java:306)[jaxb-impl-2.2.5-2.jar:2.2.5-2]
    在com.sun.xml.bind.v2.model.impl.RegistryInfoImpl.(RegistryInfoImpl.java:121)[jaxb-impl-2.2.5-2.jar:2.2.5-2]
    在com.sun.xml.bind.v2.model.impl.ModelBuilder.addRegistry(ModelBuilder.java:362)[jaxb-impl-2.2.5-2.jar:2.2.5-2]
    在com.sun.xml.bind.v2.model.impl.ModelBuilder.getTypeInfo(ModelBuilder.java:332)[jaxb-impl-2.2.5-2.jar:2.2.5-2]
    在com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:460)[jaxb-impl-2.2.5-2.jar:2.2.5-2]
    位于com.sun.xml.bind.v2.runtime.JAXBContextImpl.(JAXBContextImpl.java:298)[jaxb-impl-2.2.5-2.jar:2.2.5-2]
    在com.sun.xml.bind.v2.runtime.JAXBContextImpl.(JAXBContextImpl.java:141)[jaxb-impl-2.2.5-2.jar:2.2.5-2]
    在com.sun.xml.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1163)[jaxb-impl-2.2.5-2.jar:2.2.5-2]
    在com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:145)[jaxb-impl-2.2.5-2.jar:2.2.5-2]
    在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)[:1.6.0_25]
    在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)[:1.6.0\u 25]
    在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)[:1.6.0\u 25]
    在java.lang.reflect.Method.invoke(Method.java:597)[:1.6.0_25]
    位于javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:202)[:1.6.0_25]
    在javax.xml.bind.ContextFinder.find(ContextFinder.java:363)[:1.6.0_25]
    在javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:574)[:1.6.0_25]
    位于org.apache.cxf.common.jaxb.JAXBContextCache$2.run(JAXBContextCache.java:267)[cxf-api-2.7.4.jar:2.7.4]
    位于org.apache.cxf.common.jaxb.JAXBContextCache$2.run(JAXBContextCache.java:265)[cxf-api-2.7.4.jar:2.7.4]
    在java.security.AccessController.doPrivileged(本机方法)[:1.6.0_25]
    位于org.apache.cxf.common.jaxb.JAXBContextCache.createContext(JAXBContextCache.java:265)[cxf-api-2.7.4.jar:2.7.4]
    位于org.apache.cxf.common.jaxb.JAXBContextCache.getCachedContextAndSchemas(JAXBContextCache.java:172)[cxf-api-2.7.4.jar:2.7.4]
    位于org.apache.cxf.jaxb.JAXBDataBinding.createJAXBContextAndSchemas(JAXBDataBinding.java:464)[cxf-rt-databinding-jaxb-2.7.4.jar:2.7.4]
    在org.apache.cxf.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:330)[cxf-rt-databinding-jaxb-2.7.4.jar:2.7.4]
    在org.apache.cxf.service.factory.AbstractServiceFactoryBean.initializeDataBindings(AbstractServiceFactoryBean.java:86)[cxf-rt-core-2.7.4.jar:2.7.4]
    位于org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServiceFromClass(ReflectionServiceFactoryBean.java:478)[cxf-rt-core-2.7.4.jar:2.7.4]
    位于org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.buildServiceFromClass(JaxWsServiceFactoryBean.java:690)[cxf-rt-frontend-jaxws-2.7.4.jar:2.7.4]
    位于org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:540)[cxf-rt-core-2.7.4.jar:2.7.4]
    在org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:252)[cxf-rt-core-2.7.4.jar:2.7.4]
    在org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(JaxWsServiceFactoryBean.java:205)[cxf-rt-frontend-jaxws-2.7.4.jar:2.7.4]
    位于org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:102)[cxf-rt-frontend-simple-2.7.4.jar:2.7.4]
    在org.apache.cxf.frontend.ClientFactoryBean.create(ClientFactoryBean.java:90)[cxf-rt-frontend-simple-2.7.4.jar:2.7.4]
    在org.apache.cxf.frontend.ClientProxyFactoryBean.create(ClientProxyFactoryBean.java:156)[cxf-rt-frontend-simple-2.7.4.jar:2.7.4]
    在org.apache.cxf.jaxws.JaxWsProxyFactoryBean.create(JaxWsProxyFactoryBean.java:156)[cxf-rt-frontend-jaxws-2.7.4.jar:2.7.4]
    
    我注意到JaxbContext是用新存根和现有存根的所有类创建的,我不知道这是否正确。 我还尝试指定一个不同的JaxbDataBinding,在这里我不使用所有的类,但随后会出现不同的错误


    有什么想法吗?

    我找到了为什么会出现这种异常:Jaxb想告诉我冲突的错误\u XML\u元素\u MAPPING=\n元素名{0}}{1}有多个映射。但它无法从messages.properties文件中解析此字符串。我很期待为什么…只有在使用德语时才会发生异常。由于新旧ObjectFactory中存在重复的方法,所以真正的异常现在是非法的注释异常。唯一的方法是从新的ObjectFactory中删除这些方法。有没有更好的方法让它工作?谢谢,这对我很有帮助