TXW.create() 在 jdk 和 android 上的不同行为?

TXW.create() different behavior on jdk and android?

我已经在桌面上创建了网络服务(jdk,运行良好),我正在尝试将其移动到 android(在 android 上将其设为 运行设备)。但是我遇到了一些问题,在调试了几天之后,我发现下一个代码有不同的行为:

Schema schema = TXW.create(Schema.class,ResultFactory.createSerializer(result));

传递的result对象在调用前几乎是空的,只有systemId属性。在 JDK 上创建的模式没有空 nsUri 属性,但在 Android 上它只是空的!

JDK:

Android:

这是什么原因,我该如何解决? 它使模式无效并稍后在 cxf 中抛出异常:

javax.xml.ws.WebServiceException: java.lang.RuntimeException: Invalid schema document passed to AbstractDataBinding.addSchemaDocument, not in W3C schema namespace: schema

更新1:

我在 android 中找到了 TXW 代码 pkg.getAnnotation(XmlNamespace.class) return null 但 jdk 中的实例值:

if(nsUri.equals("##default")) {
            Package pkg = c.getPackage();
            if(pkg!=null) {
                XmlNamespace xn = pkg.getAnnotation(XmlNamespace.class); // xn = null in android
                if(xn!=null)
                    nsUri = xn.value();
            }
        }
        if(nsUri.equals("##default"))
            nsUri = "";

        return new QName(nsUri,localName);

原因在TXW.java:

Package pkg = c.getPackage();
XmlNamespace xn = pkg.getAnnotation(XmlNamespace.class);
if(xn!=null) // always null in android as it does not support package annotations
    nsUri = xn.value();

所以我不得不修改它 - 创建 public 静态变量并在之前设置它:

public static java.lang.String XmlNamespaceAnnotationValue = null;
...
Package pkg = c.getPackage();
if(pkg!=null) {
    if (XmlNamespaceAnnotationValue != null) {
        nsUri = XmlNamespaceAnnotationValue;
    } else {
         XmlNamespace xn = pkg.getAnnotation(XmlNamespace.class);
         if(xn!=null)
             nsUri = xn.value();
    }
}

使用前:

TXW.XmlNamespaceAnnotationValue = "http://www.w3.org/2001/XMLSchema";