假设有一个接口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模式中没有要实现的接口.如果没有主题界面,您仍然可以应用代理模式吗?
我从数据库中读取数据,从中生成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) 在Windows中存在一个常见问题:文件名应在传递到之前转换为本地代码页open().当然,有可能使用Win32::API它,但我不希望我的脚本依赖于平台.目前我必须写一些类似的东西:
open IN, "<", encode("cp1251", $filename) or die $!;
Run Code Online (Sandbox Code Playgroud)
但有没有图书馆,隐藏这些细节?我认为可以自动检测本地代码页,所以我只想传递unicode文件名并忘记细节.为什么它仍然不在盒子里?
我有一个网络服务,我想从肥皂头对用户进行身份验证。也就是说,我想检查soap标头中的令牌id(随机数),并根据数据库中的值验证它,如果数字匹配,我允许请求通过,否则我不想允许执行我的Web方法。
有没有使用 SOAP 标头来完成此操作的干净方法?
谢谢,
姆纳尔·杰斯瓦尔
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) 假设我有一个具有这种签名的函数:
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)