Java 从Axis TypeDesc提取XML
我使用Eclipse从WSDL文件创建了一个web服务客户机。一切都很好,因为我可以实例化我的服务调用Java对象并设置所需的字段 我的问题是,在进行服务调用之前,我无法找到提取请求XML的方法。我需要查看针对web服务生成的请求XML。谢谢你的帮助 这是Eclipse自动生成的我的服务调用对象:Java 从Axis TypeDesc提取XML,java,web-services,soap,wsdl,axis2,Java,Web Services,Soap,Wsdl,Axis2,我使用Eclipse从WSDL文件创建了一个web服务客户机。一切都很好,因为我可以实例化我的服务调用Java对象并设置所需的字段 我的问题是,在进行服务调用之前,我无法找到提取请求XML的方法。我需要查看针对web服务生成的请求XML。谢谢你的帮助 这是Eclipse自动生成的我的服务调用对象: public class ClientPrice implements java.io.Serializable { private java.lang.String clientKey;
public class ClientPrice implements java.io.Serializable {
private java.lang.String clientKey;
// Type metadata
private static org.apache.axis.description.TypeDesc typeDesc =
new org.apache.axis.description.TypeDesc(MedicareReprice.class, true);
static {
typeDesc.setXmlType(new javax.xml.namespace.QName("http://services.com", "MedicareReprice"));
org.apache.axis.description.ElementDesc elemField = new org.apache.axis.description.ElementDesc();
elemField.setFieldName("clientKey");
elemField.setXmlName(new javax.xml.namespace.QName("http://services.com", "ClientKey"));
elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
elemField.setNillable(false);
typeDesc.addFieldDesc(elemField);
typeDesc.addFieldDesc(elemField);
}
/**
* Return type metadata object
*/
public static org.apache.axis.description.TypeDesc getTypeDesc() {
return typeDesc;
}
/**
* Get Custom Serializer
*/
public static org.apache.axis.encoding.Serializer getSerializer(
java.lang.String mechType,
java.lang.Class _javaType,
javax.xml.namespace.QName _xmlType) {
return
new org.apache.axis.encoding.ser.BeanSerializer(
_javaType, _xmlType, typeDesc);
}
/**
* Get Custom Deserializer
*/
public static org.apache.axis.encoding.Deserializer getDeserializer(
java.lang.String mechType,
java.lang.Class _javaType,
javax.xml.namespace.QName _xmlType) {
return
new org.apache.axis.encoding.ser.BeanDeserializer(
_javaType, _xmlType, typeDesc);
}
}
这就是我对web服务进行实际调用的方式,但我需要在调用web服务之前提取请求XML。
我尝试使用TypeDesc对象,但没有返回XML
ClientPrice price = new ClientPrice();
price.setClientKey("12345");
ProcessingLocator serviceLocator = new ProcessingLocator();
IProcessing service = serviceLocator.getSecureSoap11();
//Help here. How can I extract XML before invoking web serice????
Results results = service.invokeWebService(price);
提前谢谢。迟到总比不迟到好,我也遇到了同样的问题,下面是我的答案
public static String serializeAxisObject(final Object obj, final boolean removeNamespaces, final boolean prettyPrint)
{
final StringWriter outStr = new StringWriter();
final TypeDesc typeDesc = getAxisTypeDesc(obj);
QName qname = typeDesc.getXmlType();
String lname = qname.getLocalPart();
lname = lname.substring(1);
qname = removeNamespaces ? new QName(lname) : new QName(qname.getNamespaceURI(), lname);
final AxisServer server = new AxisServer();
final BeanSerializer ser = new BeanSerializer(obj.getClass(), qname, typeDesc);
final SerializationContext ctx = new SerializationContext(outStr, new MessageContext(server));
ctx.setSendDecl(false);
ctx.setDoMultiRefs(false);
ctx.setPretty(prettyPrint);
try
{
ser.serialize(qname, new AttributesImpl(), obj, ctx);
} catch (final Exception e) {
//throw new Exception(“Unable to serialize object ” + obj.getClass().getName(), e);
e.printStackTrace();
}
String xml = outStr.toString();
if (removeNamespaces)
{
// remove any namespace attributes
xml = xml.replaceAll(" xmlns[:=].*?\".*?\"", "")
.replaceAll(" xsi:type=\".*?\"", "");
}
return(xml);
}
public static TypeDesc getAxisTypeDesc(final Object obj)
{
try
{
final Class objClass = obj.getClass();
final Method methodGetTypeDesc = objClass.getMethod("getTypeDesc", new Class[] {});
final TypeDesc typeDesc = (TypeDesc) methodGetTypeDesc.invoke(obj, new Object[] {});
return(typeDesc);
}
catch (final Exception e)
{
e.printStackTrace();
}
return null;
}
如何使用它
serializeAxisObject(new ClientPrice(), false, false);
我希望这有帮助已经有一个由WSDL2java生成的方法;上面显示的getSerializer。为什么您需要使用新的BeanSerializer(xx?