假设我有一种抛出某种异常的方法.抛出异常的代码位于访问外部服务的第三方库中.我有一些类可以完成外部服务的大量工作,并且在整个过程中有很多异常处理来处理潜在的问题.我遇到的问题是我可能有很多例外,但我可能只需要执行一些操作,如果有的话,并且有大量的try/catch块.异常的类型甚至可能不相关,或者不同的方法可能抛出相同类型的异常,但是根据抛出它的方法需要采取不同的操作.
我正在寻找的是一个注释,它可以取代try/catch,并简单地指示当该方法中存在异常时要采取的行为.我知道Spring ApsectJ可以做到这一点,但我现在无法轻松添加任何新的依赖项或修改pom来调整现有的依赖项.因此,我希望通过自定义注释可以实现这一点.例如:
@Catcher(action=SomeEnum.SOME_ACTION)
public void doSomething(ServiceObj obj) throws SomeException {
ExternalService.makeThingsHappen(obj);
}
Run Code Online (Sandbox Code Playgroud)
当然,我会假设一个单独的类会处理异常.另一个困难是我需要传递的ServiceObj.如果makeThingsHappen()失败,我可能需要obj来执行其他操作.action变量将告诉处理程序类如何处理obj.
这可以在没有严重粪便的情况下完成,还是我希望有可能不存在的东西?
我正在使用EWS Java 1.2,尽管C#中的2.0显示完全相同的问题,而Exchange 2010 SP3,因此在汇总3之前的SP2中有关邮件正文的特定错误不是问题.
长话短说:EWS + Exchange =痛苦.在Exchange中使用EWS,您可以创建约会.您可以指定约会的消息正文是HTML,并为其提供一堆HTML.这将执行某种HTML - > RTF转换,当您在Outlook桌面或Web客户端中查看HTML时,它会破坏HTML.好吧,我们可以将HTML定制为在过程中没有被吃掉但仍然看起来不错的东西.
除非您通过更改邮件正文更新约会时,它真的会吃HTML格式.如果它与您在创建时提供的HTML相同并不重要.第二次保存会破坏它,只留下粗体文本,换行符和制表符.就好像它是显示纯文本的几个小块格式,或者它是从转换后的HTML中显示一个非常精简的RTF.真正令人抓狂的是它只在你更新身体后才会发生.
问题是,我通过检查扩展属性,在MFCMAPI和EWS中查看了这些约会(和相关的MeetingRequests,它们以相同的方式覆盖).首次创建约会时,仅填充RTF正文.纯文本和HTML正文为空,RTF同步,本机正文值为2,这意味着它应显示RTF.好的,这是有道理的.
在更新时,所有三种体型都存在.RTF不同步.本机正文值为3,这意味着它应该显示HTML.我签了MFCMAPI.纯文本正文和RTF正文都显示内存不足错误,但打开属性会正确显示.HTML正文存在.根据文档,这应该发生,这是零的原因.最佳主体算法指出,如果填充了本机主体属性,那么将使用它并且全部完成.嗯,这显然没有发生.如果它由于某种原因没有获得该值,那么它将通过条件链.好吧,条件链表明在这种情况下应该显示HTML正文.MFCMAPI同意导出的项目,因为它显示本机主体是HTML正文.OWA会很好地展示它.但Outlook 2010/2013?不.
我在这里结束了我的智慧.无论我做什么,我都无法让桌面Outlook正确显示身体.它似乎是从根本上破坏了服务器端的东西,但没有列出已知的错误(除了前面提到的SP2预卷3问题,这不是这里的情况),我找不到任何解释为什么更新打破它的文档厉害.我能做的最好的事情就是直接在创建时设置pidTagBodyHtml,并从一开始就将其打破.至少那是一致的.
编辑:我已经实现了RTF解压缩算法来窥视内部.果然,用于新约会的RTF消息正文和用于更新约会的RTF消息正文(其中正文更新为几乎相同的约会)是非常不同的!Exchange遵循两个单独的代码路径服务器端,它打破了正文格式!我看到的唯一可能的解决方案是实现压缩和格式化算法,并在客户端中手动构建有效的RTF主体,这不是一个小小的壮举.
html outlook exchange-server exchangewebservices ews-managed-api
我正在 Java 中使用 Jackson 2.4 来做一些 JSON 跑腿工作。我使用 Apache HttpGet 调用远程服务器,使用 Jackson 将结果反序列化为 POJO,操作这些结果,然后使用 Jackson 对其进行序列化,以使用 HttpPost 推送回远程服务器。
\n\n我发现的问题是 Jackson 正在将 unicode 文字转换为 unicode 字符,由于两端的编码问题,我不需要它这样做。例如,我可能在 JSON 中包含以下内容:
\n\n"field1": "\\u00a2"\nRun Code Online (Sandbox Code Playgroud)\n\n但是 Jackson 在反序列化时将“\\u00a2”转换为“\xc2\xa2”,这会导致远程服务器出现问题。它必须被维护为转义的 unicode。如果我使用 Apache EntityUtils(指定 UTF-8)之类的东西,或者甚至从 Web 浏览器进行调用来获取数据,则转义的 unicode 会被保留,因此我知道它是从服务器正确传入的。如果我让 Jackson 在响应上使用来自实体的输入流,它会自动进行转换。
\n\n我尝试使用显式设置为 UTF-8 的 JsonGenerator 来写入 HttpPost。它不起作用,远程服务器仍然拒绝它。我已经研究了 ObjectMapper 和 JsonParser 的配置选项,但我没有看到任何可以覆盖此行为的内容。当然,转义非 ASCII 码,但这不是我需要做的。也许我遗漏了一些明显的东西,但我无法让 Jackson 反序列化这个字符串而不替换转义的 unicode。
\n\n编辑:好吧,我的错,唯一有问题的文字有 3 或 5 个前导斜杠,而不仅仅是一个。这有点奇怪,但 Java 似乎是在反序列化过程中默认解压它的东西,即使从服务器返回的原始文本保留了它。仍然不确定如何让 Java 在不检查大量文本的情况下保留它。
\n我迫切需要替换 C# 应用程序中使用的包装器。基本上,我们需要做的是将网络摄像头附加到两个图片框之一。这将用于通过按下按钮来拍摄静态图像,这可能会分离相机源并将静态图像附加到该图片框,然后稍后重新附加相机源。我们之前找到了一些免费代码,可以与 CaptureDevice.cs 文件和 Pinvoke.dll 结合使用,将其绑定到 avicap32.dll 中。不幸的是,这似乎存在随机、间歇性错误,无法可靠地重现。实在是太片状了。在某个随机时刻,其中一个图片框可能会变黑,并且在拍摄照片之前不会显示提要,此时正确的图片将附加到图片框。然后,即使只连接了一个网络摄像头,它也会不断提示选择网络摄像头,否则它不会这样做。
坦率地说,我对 Microsoft 没有在 .NET 中包含任何内容来覆盖网络摄像头视频源感到惊讶和沮丧。我正在寻找可靠且相对简单的方法来取代这个有缺陷的网络摄像头系统。
我正在研究一个将从类似内存数据库的对象中受益的项目。我可能会有一两千个具有相同结构的对象,它们都继承自一个抽象类。将有几个字符串字段,一个 int,可能是一两个枚举(甚至可能是一组枚举),然后是一组字符串。还需要一个瞬态布尔字段,但这可能不是问题。
这些对象将根据预设数据进行实例化和构造,但如果需要,可以在此之外创建其他对象。它们可能存储在 XML 文件或类似文件中。当然,我宁愿不硬连线整个事情,而且使用像 SQLite 这样的本地数据库感觉有点矫枉过正。
如果不是为了一件事,存储这些对象将相对简单:我希望用户能够轻松地从任何值中找到他们想要的对象,其中大多数是唯一的。这排除了 HashMap 除非我想包装一大堆它们,这并不理想。这让我寻找一种索引的、类似内存数据库的对象,它支持通过对象的任何字段进行检索。它可能不必直接存储对象,但可以在检索时组合它们,或者根据一个字段检索“行”,从作为一种键的同一“行”中获取另一个字段,然后检索对象来自基于该键的单个 HashMap。
简而言之,其想法是根据对象包含的任何字段轻松快速地检索具有相同字段的对象。我见过各种不同的库,它们可能会做这种事情,但是那里有无数这样的东西。任何可能的工作都需要是免费的,并且与各种开放许可证兼容。
我正在Intellij Ultimate 14中开展一个项目.我不打算对应用程序进行实时调试以跟踪调用.遵循所有代码路径所需的时间将是疯狂的.我希望Intellij有一些分析工具可以为我提供在给定特定起点或点的项目内进行的所有调用.因此,如果我从方法A()开始,并且A调用B()和C(),并且B调用D(),那么我希望能够以某种方式收集和导出/显示该信息.我还想要包含任何方法的注释,它需要能够在可能的情况下解析实现的接口(许多接口只有一个),或者允许我根据需要选择实现.我不认为Intellij除了能够找到单个指定方法的所有调用者/被调用者之外,还具有此类功能.这样的工具存在吗?