【发布时间】:2014-02-22 03:50:24
【问题描述】:
我正在尝试发送一个包含另一个 XML 的 CDATA 部分的 soap 消息,但我遇到了解析错误。我需要将 XML 数据嵌入到 CDATA 部分。
下面是我的代码;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import org.apache.axis.AxisFault;
import com.levo.rec.*;
public class REC
{
public static void main(String args[])
{
String mesaj =
"<![CDATA[ " +
" <REC_DATA xmlns=\"http://www.levo.com/REC\"> " +
" <RECheader RECID=\"\" REClabel=\"\"/> " +
" <RECattributes> " +
" <attribute name=\"USERNAME\" value=\"" + userName + "\"/> " +
" <attribute name=\"DATA\" value=\"" + userData + "\"/> " +
" </RECattributes> " +
" </REC_DATA> " +
"]]> " ;
try
{
y = new RECPortStub();
y.sendMsg(mesaj);
} catch (AxisFault e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (RemoteException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
“RECPortStub”类的代码如下;
public class RECPortStub extends org.apache.axis.client.Stub implements
com.levo.rec.RECPort
{
private java.util.Vector cachedSerClasses = new java.util.Vector();
private java.util.Vector cachedSerQNames = new java.util.Vector();
private java.util.Vector cachedSerFactories = new java.util.Vector();
private java.util.Vector cachedDeserFactories = new java.util.Vector();
static org.apache.axis.description.OperationDesc[] _operations;
static
{
_operations = new org.apache.axis.description.OperationDesc[1];
_initOperationDesc1();
}
private static void _initOperationDesc1()
{
org.apache.axis.description.OperationDesc oper;
org.apache.axis.description.ParameterDesc param;
oper = new org.apache.axis.description.OperationDesc();
oper.setName("sendMsg");
param = new org.apache.axis.description.ParameterDesc(
new javax.xml.namespace.QName("", "inputXMLMessage"),
org.apache.axis.description.ParameterDesc.IN,
new javax.xml.namespace.QName(
"http://www.w3.org/2001/XMLSchema", "string"),
java.lang.String.class, false, false);
oper.addParameter(param);
oper.setReturnType(new javax.xml.namespace.QName(
"http://www.w3.org/2001/XMLSchema", "string"));
oper.setReturnClass(java.lang.String.class);
oper.setReturnQName(new javax.xml.namespace.QName("",
"outputXMLMessage"));
oper.setStyle(org.apache.axis.constants.Style.RPC);
oper.setUse(org.apache.axis.constants.Use.ENCODED);
_operations[0] = oper;
}
public RECPortStub() throws org.apache.axis.AxisFault
{
this(null);
}
public RECPortStub(java.net.URL endpointURL,
javax.xml.rpc.Service service) throws org.apache.axis.AxisFault
{
this(service);
super.cachedEndpoint = endpointURL;
}
public RECPortStub(javax.xml.rpc.Service service)
throws org.apache.axis.AxisFault
{
if (service == null)
{
super.service = new org.apache.axis.client.Service();
} else
{
super.service = service;
}
((org.apache.axis.client.Service) super.service)
.setTypeMappingVersion("1.2");
}
protected org.apache.axis.client.Call createCall()
throws java.rmi.RemoteException
{
try
{
org.apache.axis.client.Call _call = super._createCall();
if (super.maintainSessionSet)
{
_call.setMaintainSession(super.maintainSession);
}
if (super.cachedUsername != null)
{
_call.setUsername(super.cachedUsername);
}
if (super.cachedPassword != null)
{
_call.setPassword(super.cachedPassword);
}
if (super.cachedEndpoint != null)
{
_call.setTargetEndpointAddress(super.cachedEndpoint);
}
if (super.cachedTimeout != null)
{
_call.setTimeout(super.cachedTimeout);
}
if (super.cachedPortName != null)
{
_call.setPortName(super.cachedPortName);
}
java.util.Enumeration keys = super.cachedProperties.keys();
while (keys.hasMoreElements())
{
java.lang.String key = (java.lang.String) keys.nextElement();
_call.setProperty(key, super.cachedProperties.get(key));
}
return _call;
} catch (java.lang.Throwable _t)
{
throw new org.apache.axis.AxisFault(
"Failure trying to get the Call object", _t);
}
}
public java.lang.String sendMsg(java.lang.String inputXMLMessage)
throws java.rmi.RemoteException
{
if (super.cachedEndpoint == null)
{
throw new org.apache.axis.NoEndPointException();
}
org.apache.axis.client.Call _call = createCall();
_call.setOperation(_operations[0]);
_call.setUseSOAPAction(true);
_call.setSOAPActionURI("");
_call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP11_CONSTANTS);
_call.setOperationName(new javax.xml.namespace.QName(
"http://hedehodo.com/RECadapter",
"sendMsg"));
setRequestHeaders(_call);
setAttachments(_call);
try
{
java.lang.Object _resp = _call
.invoke(new java.lang.Object[] { inputXMLMessage });
if (_resp instanceof java.rmi.RemoteException)
{
throw (java.rmi.RemoteException) _resp;
} else
{
extractAttachments(_call);
try
{
return (java.lang.String) _resp;
} catch (java.lang.Exception _exception)
{
return (java.lang.String) org.apache.axis.utils.JavaUtils
.convert(_resp, java.lang.String.class);
}
}
} catch (org.apache.axis.AxisFault axisFaultException)
{
throw axisFaultException;
}
}
}
【问题讨论】:
-
显示完整的堆栈跟踪
-
能否展示一下RECPortStub的代码?
-
在 SOAP 消息的哪个部分插入 CDATA 部分?
-
@helderdarocha : 我刚刚添加了 RECPortStub 的代码
-
这不是你的完整代码,是吗?主类甚至不会编译。
userName和userData是什么?该 XML 片段也不能是您的整个消息(CDATA 部分不是格式良好的 XML 文档)。 Soap 消息还具有您的框架可能提供的特定结构,但这里并不清楚。在main()中显示您正在使用的完整代码,不要省略任何内容。信息。
标签: java xml soap escaping character