java 调用 webservice datetime,重写webservice中传入的无效datetime值

您可以创建一个SoapExtension,在soap xml被框架反序列化之前对其进行修改。如果使用wcf和服务引用,则需要以不同的方式执行。这是我前段时间为清理消息而创建的一些代码。

以及在我的例子中删除非法SOAP字符的代码

using System;

using System.IO;

using System.Text.RegularExpressions;

using System.Web.Services.Protocols;

namespace mAdcOW.SoapCleanerModule

{

[AttributeUsage(AttributeTargets.Method)]

public class SOAPCleaner : SoapExtensionAttribute

{

public override Type ExtensionType

{

get { return typeof (SOAPCleanerExtension); }

}

public override int Priority { get; set; }

}

public class SOAPCleanerExtension : SoapExtension

{

private static readonly Regex _reInvalidXmlChars = new Regex(@"[01]?[0123456789ABCDEF];",

RegexOptions.Compiled |

RegexOptions.CultureInvariant);

private Stream _originalStream;

private MemoryStream _processStream;

public override void Initialize(object initializer)

{

}

public override object GetInitializer(LogicalMethodInfo methodInfo, SoapExtensionAttribute attribute)

{

return null;

}

public override object GetInitializer(Type serviceType)

{

return null;

}

public override Stream ChainStream(Stream stream)

{

_originalStream = stream;

_processStream = new MemoryStream();

return _processStream;

}

public override void ProcessMessage(SoapMessage message)

{

switch (message.Stage)

{

case SoapMessageStage.BeforeSerialize:

{

break;

}

case SoapMessageStage.AfterSerialize:

{

// This is the message we send for our soap call

// Just pass our stream unmodified

_processStream.Position = 0;

Copy(_processStream, _originalStream);

break;

}

case SoapMessageStage.BeforeDeserialize:

{

// This is the message we get back from the webservice

CopyAndClean(_originalStream, _processStream);

//Copy(_originalStream, _processStream);

_processStream.Position = 0;

break;

}

case SoapMessageStage.AfterDeserialize:

break;

default:

break;

}

}

private void CopyAndClean(Stream from, Stream to)

{

TextReader reader = new StreamReader(from);

TextWriter writer = new StreamWriter(to);

string msg = reader.ReadToEnd();

string cleanMsg = _reInvalidXmlChars.Replace(msg, "");

writer.WriteLine(cleanMsg);

writer.Flush();

}

private void Copy(Stream from, Stream to)

{

TextReader reader = new StreamReader(from);

TextWriter writer = new StreamWriter(to);

writer.WriteLine(reader.ReadToEnd());

writer.Flush();

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值