小编dma*_*a_k的帖子

代理模式与覆盖

假设有一个接口Subject.

interface Subject { void request(); }
Run Code Online (Sandbox Code Playgroud)

我们有一个RealSubject类.假设我们想要增强RealSubject,我们可以使用包裹RealSubject的代理模式:

class Proxy implements Subject { 
   private RealSubject ref;
   void request(){ ... }
}
Run Code Online (Sandbox Code Playgroud)

或者我们可以扩展RealSubject并覆盖该方法

class EnhancedSubject extends RealSubject {
   @Override
   void request() { ... }
}
Run Code Online (Sandbox Code Playgroud)

哪种方法更好?我知道Liskov原则; 让我们假设EnhancedSubject满足Liskov原则.你还在考虑继承吗?

如果没有接口Subject(即,RealSubject没有实现任何接口),似乎"inherit and override"是唯一的选项,因为在Proxy模式中没有要实现的接口.如果没有主题界面,您仍然可以应用代理模式吗?

java design-patterns dynamic-proxy

4
推荐指数
2
解决办法
1810
查看次数

从大量数据生成大PDF

我从数据库中读取数据,从中生成HTML DOM.数据量巨大,因此它不能同时适应内存,但它可以逐块提供.

我想使用Flying Saucer将生成的HTML转换为PDF :

import org.xhtmlrenderer.pdf.ITextRenderer;
import org.dom4j.DocumentFactory;
import org.dom4j.Element;
import org.dom4j.io.DOMWriter;

OutputStream bodyStream = outputMessage.getBody();

ITextRenderer renderer = new ITextRenderer();

DocumentFactory documentFactory = DocumentFactory.getInstance();
DOMWriter domWriter = new DOMWriter();

Element htmlNode = documentFactory.createElement("html");
Document htmlDocument = documentFactory.createDocument(htmlNode);

int currentLine = 1;
int currentPage = 1;

try {
    while (currentLine <= numberOfLines) {
        currentLine += loadDataToDOM(documentFactory, htmlNode, currentLine, CHUNK_SIZE);

        renderer.setDocument(domWriter.write(htmlDocument), null);
        renderer.layout();

        if (currentPage == 1) {
            // For the first page the PDF writer is created: …
Run Code Online (Sandbox Code Playgroud)

java pdf-generation itext flying-saucer

4
推荐指数
1
解决办法
3251
查看次数

将文件I/O API与unicode文件名一起使用的通用方法是什么?

在Windows中存在一个常见问题:文件名应在传递到之前转换为本地代码页open().当然,有可能使用Win32::API它,但我不希望我的脚本依赖于平台.目前我必须写一些类似的东西:

open IN, "<", encode("cp1251", $filename) or die $!; 
Run Code Online (Sandbox Code Playgroud)

但有没有图书馆,隐藏这些细节?我认为可以自动检测本地代码页,所以我只想传递unicode文件名并忘记细节.为什么它仍然不在盒子里?

filesystems unicode perl

3
推荐指数
1
解决办法
488
查看次数

Web 服务肥皂头身份验证

我有一个网络服务,我想从肥皂头对用户进行身份验证。也就是说,我想检查soap标头中的令牌id(随机数),并根据数据库中的值验证它,如果数字匹配,我允许请求通过,否则我不想允许执行我的Web方法。

有没有使用 SOAP 标头来完成此操作的干净方法?

谢谢,

姆纳尔·杰斯瓦尔

soap web-services header

3
推荐指数
1
解决办法
5万
查看次数

Maven JAX WS中的Jaxb Xew插件

mvn generate-sources
[INFO] Scanning for projects...
[INFO]
[INFO] Using the builder          org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBu
ilder with a thread count of 1
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building epay_api 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- jaxws-maven-plugin:2.3:wsimport (wsimport-generate-sources) @ api ---
[INFO] Processing: file:/C:/service.wsdl
[WARNING] Using platform encoding (Cp1256), build is platform dependent!
[INFO] jaxws:wsimport args: [-keep, -s, C:\api\src\main\java, -d, C:\api\target\classes,     -verbose, -Xnocompile, -B-debug, -B-no-header, -B-Xxew, -B-Xx
ew:instantiate lazy, -B-Xxew:delete, -B-extension, -B-b C:\api/src/main/res
ources/jaxb_binding.xml, "file:/C:/api/src/main/resources/service.w
sdl"]
[DEBUG] JAXB Compilation started (XmlElementWrapperPlugin.onActivated):
[DEBUG]   buildId         : 2.2.7 …
Run Code Online (Sandbox Code Playgroud)

jaxb2 jaxws-maven-plugin jaxb-xew-plugin

1
推荐指数
1
解决办法
6462
查看次数

如何将lambda类型强制为特定的类型?

假设我有一个具有这种签名的函数:

public static <T> List<Future<T>> invokeAll(Stream<Callable<T>> tasks) {
   ... submit given tasks using executor ...
}
Run Code Online (Sandbox Code Playgroud)

我有一个数据流,应该"包装"成可调用的并传递给这个函数.如下的天真映射不起作用:

Stream<String> ids = Stream.of("1", "2", "3");

invokeAll(ids.map((id) -> {
    // Do a long computation with given ID...
    return Boolean.TRUE; // Compilation error: Type mismatch: cannot convert from Boolean to Callable<Object>
}));
Run Code Online (Sandbox Code Playgroud)

一种解决方案是返回返回lambda的lambda:

invokeAll(ids.map((id) -> {
    return () -> {
        // Do a long computation with given ID...
        return Boolean.TRUE;
    };
}));
Run Code Online (Sandbox Code Playgroud)

另一个(在某种程度上等效)是使用辅助函数:

public static <T> Callable<T> createCallable(T id) {
    return () -> { …
Run Code Online (Sandbox Code Playgroud)

java lambda casting type-inference java-8

1
推荐指数
1
解决办法
103
查看次数