Weblogic 12.2 - CXF 3.1 - JAXB 2.2 - 部署:错误 javax.xml.ws.WebServiceException:java.lang.IllegalStateException:前缀 X 未绑定

Weblogic 12.2 - CXF 3.1 - JAXB 2.2 - Deployment : Error javax.xml.ws.WebServiceException: java.lang.IllegalStateException: The prefix X is not bound

启动weblogic服务器时出现错误:

生成的 wsdl 有问题:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name '': Invocation of init method failed; nested exception is javax.xml.ws.WebServiceException: java.lang.IllegalStateException: The prefix X is not bound.
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
Caused by: javax.xml.ws.WebServiceException: java.lang.IllegalStateException: The prefix X is not bound.
        at org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:375)
        at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:255)
        at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:543)
Caused by: java.lang.IllegalStateException: The prefix X is not bound.
        at org.apache.ws.commons.schema.SchemaBuilder.getRefQName(SchemaBuilder.java:823)
        at org.apache.ws.commons.schema.SchemaBuilder.getRefQName(SchemaBuilder.java:831)

在 @XmlRootElement

中定义时,在元素根上找不到名称空间

这里是SchemaBuilder.getRefQName源代码:

https://github.com/wso2/wso2-xmlschema/blob/master/xmlschema/src/main/java/org/apache/ws/commons/schema/SchemaBuilder.java

        prefix = pName.substring(0, offset);
        uri = NodeNamespaceContext.getNamespaceURI(pNode, prefix);
        if (uri == null || Constants.NULL_NS_URI.equals(uri)) {
            if (schema.parent != null
                    && schema.parent.getNamespaceContext() != null) {
                uri = schema.parent.getNamespaceContext().getNamespaceURI(
                        prefix);
            }
        }

        if (uri == null || Constants.NULL_NS_URI.equals(uri)) {
            throw new IllegalStateException("The prefix " + prefix
                    + " is not bound.");
        }

有什么想法吗?

我的问题已通过在 java 实体中定义的 @XmlType 注释中添加命名空间来解决:

@XmlType(name = "", propOrder = { "elt1", "elt2", "elt3" }, namespace ="http://x.y.z")

另一种似乎可以更好地避免版本兼容性问题的解决方案是强制您的项目使用 weblogic 库。