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";
我已经在桌面上创建了网络服务(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";