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

create()在jdk和android上的不同行为?,android,xml,web-services,cxf,Android,Xml,Web Services,Cxf,我已经在桌面上创建了webservice(jdk,运行良好),我正在尝试将其移动到android(使其在android设备上运行)。但我遇到了一些问题,经过几天的调试,我发现下一个代码的行为有所不同: Schema Schema=TXW.create(Schema.class,ResultFactory.createSerializer(result)) 传递的result对象在调用之前几乎为空,并且只有systemId属性。在JDK上创建的模式没有nullnsUri属性,但在Android上它

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

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

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

JDK:

安卓:

原因是什么?我该如何解决? 它使架构无效,并在以后的cxf中引发异常:

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

我在android中找到了
TXW
code
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 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";