我需要在Java中实现一系列HTTP请求,并决定在4.3版本中使用Apaches HttpClient(最新版本).
问题是所有这些请求都使用cookie进行会话管理,我似乎无法找到访问该cookie并将其从请求传递到请求的方法.我使用curl的命令看起来像:
# Login
curl -c cookies -d "UserName=username&Password=password" "https://example.com/Login"
# Upload a file
curl -b cookies -F fileUpload=@IMG_0013.JPG "https://example.com/File"
# Get results of server processing file
curl -b cookies "https://example.com/File/1234/Content"
Run Code Online (Sandbox Code Playgroud)
他们工作得很好.然而,使用HttpClient似乎无法工作.我试过的是:
URI serverAddress = new URI("https://example.com/");
URI loginUri = UriBuilder.fromUri(serverAddress).segment("Login").queryParam("UserName", "username")
.queryParam("Password", "password").build();
RequestConfig globalConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.BEST_MATCH).build();
CookieStore cookieStore = new BasicCookieStore();
HttpClientContext context = HttpClientContext.create();
context.setCookieStore(cookieStore);
CloseableHttpClient httpClient = HttpClients.custom().setDefaultRequestConfig(globalConfig).setDefaultCookieStore(cookieStore).build();
HttpGet httpGet = new HttpGet(loginUri);
CloseableHttpResponse loginResponse = httpClient.execute(httpGet,context);
System.out.println(context.getCookieStore().getCookies());
Run Code Online (Sandbox Code Playgroud)
最后一行的输出始终为空列表.我认为它应该包含我的Cookie,对吗?
有人可以给我一个关于如何使用Apache HttpClient 4.3处理cookie的小例子吗?
谢谢
我正在尝试将我的代码从Lucene 3.4更新到4.1.我发现除了一个以外的变化.我有代码需要迭代一个字段的所有术语值.在Lucene 3.1中,有一个IndexReader#terms()方法提供了一个TermEnum,我可以迭代它.这似乎已经改变了Lucene 4.1,甚至在文档中搜索几个小时后我也无法弄清楚如何.有人可以指点我正确的方向吗?
谢谢.
我试图让JerseyTest运行使用org.glassfish.jersey.test.grizzly.GrizzlyWebContainerFactory.我已经搜索了互联网,并在一天中的大部分时间里尝试了几件事.这似乎是不可能的,我真的很感激有关如何启动和运行的任何帮助.
我根据Jersey 2文档中的代码创建了一个最小的示例.代码如下:
package test;
import static org.junit.Assert.assertEquals;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.Application;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.test.DeploymentContext;
import org.glassfish.jersey.test.JerseyTest;
import org.glassfish.jersey.test.ServletDeploymentContext;
import org.glassfish.jersey.test.grizzly.GrizzlyWebTestContainerFactory;
import org.glassfish.jersey.test.spi.TestContainerException;
import org.glassfish.jersey.test.spi.TestContainerFactory;
import org.junit.Test;
public class DistributedDeploymentTest extends JerseyTest {
@Path("hello")
public static class HelloResource {
@GET
public String getHello() {
return "Hello World!";
}
}
@Override
protected Application configure() {
return new ResourceConfig(HelloResource.class);
}
@Override
protected TestContainerFactory getTestContainerFactory() throws TestContainerException {
return new GrizzlyWebTestContainerFactory();
}
@Override
protected DeploymentContext configureDeployment() {
return …Run Code Online (Sandbox Code Playgroud) 在创建时,如何命令JPA将带有文本内容的MySQL数据库列设置为区分大小写?
有人知道是否可以在JPA中建立反向引用@EmbeddedId.
例如,有一个表格的实体
@Entity
public class Entity1 {
@Id
@GeneratedValue
private String identifier;
private Entity1 relationToEntity1;
//Left out the getters and setters for simplicity
}
Run Code Online (Sandbox Code Playgroud)
第二个具有复杂嵌入式Id的实体.第二个实体的一部分是对其父实体的引用.像这样:
@Entity
public class Entity2 {
@EmbeddedId private Entity2Identifier id;
//Left out the getters and setters for simplicity.
}
@Embedabble
public class Entity2Identifier {
private String firstPartOfIdentifier;
private Entity1 parent;
//Left out the getters and setters for simplicity.
}
Run Code Online (Sandbox Code Playgroud)
当我尝试通过JPA(Implementation is EclipseLink)将这样的构造保存到数据库时,我得到了几个例外:
Exception [EclipseLink-93] (Eclipse Persistence Services - 1.1.0.r3639-SNAPSHOT):
org.eclipse.persistence.exceptions.DescriptorException
Exception Description: The table …Run Code Online (Sandbox Code Playgroud) 我是Grails的新手,我想尝试一个非常简单的例子.我应该提交一份表格并在屏幕上显示"Hello World".它由以下控制器组成:
package surface
class SearchController {
def index() {
render(view: "search")
}
def result() {
render "Hello World"
}
}
Run Code Online (Sandbox Code Playgroud)
和一个视图,形式:
<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>
<g:form name="searchform" url="result">
<g:textArea cols="80" rows="30" name="searchfield"/>
<g:actionSubmit value="Ask"/>
</g:form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
当我点击"询问"时,我收到404错误,但浏览器正确访问"/ surface/search/result".当我直接输入该地址而不使用表格时,"Hello World"正确显示.这可能是一个明智的选择,但我似乎无法找出为什么这不起作用的文档.
我有两个(或更多)Java线程使用JPA从mysql数据库创建,更新和删除实体.为了实现这一点,我有一个PersistenceLayer类创建EntityManager并为我的所有实体提供保存,更新和删除方法,如下所示:
public void saveEntity(Entity entity) {
manager.getTransaction().begin();
manager.persist(entity);
manager.getTransaction().commit();
}
public void saveEntity2(Entity2 entity) {
manager.getTransaction().begin();
manager.persist(entity);
manager.getTransaction().commit();
}
Run Code Online (Sandbox Code Playgroud)
如果一个线程同时进入操作saveEntity和另一个saveEntity2,两者都将尝试从EntityManager获取事务,这将失败.但是我一直认为底层数据库能够管理多个事务,特别是如果两个事务处理不同的行甚至不同的表.当然,我可以同步块,但这意味着一次只能进行一次数据库连接,这种连接不会扩展到创建多个线程的多个用户.
我在这做什么错误的假设?是否可以通过JPA向数据库提交多个事务并让数据库处理并发问题?
我在 bitbucket 上有一个 GIT 存储库,我希望我的 Jenkins 服务器能够自动访问它。这只能使用公钥/私钥身份验证。所以我创建了一个密钥对并将公钥上传到了bitbucket。公钥和私钥在我的服务器上运行 jenkins 的 tomcat 用户的 .ssh 文件夹中。当我以该用户身份登录服务器时,我可以克隆我的项目。
但是,我无法让詹金斯从 bitbucket 实际检查代码。它总是说:
Permission denied (publickey).
fatal: The remote end hung up unexpectedly
Run Code Online (Sandbox Code Playgroud)
好吧,我认为发生这种情况是因为在通过 ssh 访问存储库时,我需要为我的私钥提供密码,而 jenkins 无法自动执行此操作。我读到可以通过在 .ssh 文件夹中提供一个包含以下内容的配置文件来避免被要求输入密码:
Host bitbucket.org
IdentityFile ~/.ssh/id_dsa
Run Code Online (Sandbox Code Playgroud)
我这样做了,但是一旦我提供了该文件,我就无法再从 bitbucket 克隆存储库。甚至不是直接从服务器获得与上图相同的错误消息。
有没有人设法使这个设置工作?我还在 stackoverflow 上阅读了以下对我没有用的线程:如何为 hudson / jenkins 设置私有 ssh 密钥以访问 bitbucket?我通过创建一个只运行“whoami”的空测试项目来检查 tomcat 是否真的在用户 tomcat6 下运行。所以我几乎没有解决问题的想法。
我正在使用 Vertx。4.0.3 并尝试将请求正文直接流式传输到文件。为此,我使用以下(Kotlin)代码:
router.post("/upload").handler { ctx ->
val startTime = System.currentTimeMillis()
val response = ctx.response()
val request = ctx.request()
val fs = vertx.fileSystem()
fs.open("data.bin", OpenOptions()) { res ->
if (res.succeeded()) {
val asyncFile = res.result()
request.pipeTo(asyncFile).onComplete { writeResult ->
if(writeResult.succeeded()) {
response.end("${System.currentTimeMillis() - startTime}")
} else {
response.setStatusCode(500).end(res.cause().stackTraceToString())
}
}
} else {
response.setStatusCode(500).end(res.cause().stackTraceToString())
}
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是我遇到了一个异常,例如:
java.lang.IllegalStateException: Request has already been read
at io.vertx.core.http.impl.Http1xServerRequest.checkEnded(Http1xServerRequest.java:628)
at io.vertx.core.http.impl.Http1xServerRequest.endHandler(Http1xServerRequest.java:334)
at io.vertx.core.http.impl.Http1xServerRequest.endHandler(Http1xServerRequest.java:60)
at io.vertx.core.streams.impl.PipeImpl.<init>(PipeImpl.java:35)
at io.vertx.core.streams.ReadStream.pipeTo(ReadStream.java:119)
at io.vertx.ext.web.impl.HttpServerRequestWrapper.pipeTo(HttpServerRequestWrapper.java:410)
at fileupload.AppKt$main$2$1.handle(App.kt:60)
at fileupload.AppKt$main$2$1.handle(App.kt) …Run Code Online (Sandbox Code Playgroud) 我想这是一个简单的问题,但我似乎无法在文档或Solr维基中找到它.
所以,我只需要知道添加多值字段(arr)的语法是什么.
我知道你可以添加任何其他字段
<add>
<doc>
<field name="fieldname">fieldvalue</field>
</doc>
</add>
Run Code Online (Sandbox Code Playgroud)
谢谢.
我刚刚将我的应用程序从支持库转换为AndroidX。现在一切都可以编译,并且该应用程序成功启动。但是,我的一项活动用途com.google.android.material.navigation.NavigationView似乎仍然取决于旧的支持库。具体来说,如果我查看NavigationView的代码,就会发现对以下类的依赖:
import android.support.annotation.DimenRes;
import android.support.annotation.Dimension;
import android.support.annotation.DrawableRes;
import android.support.annotation.IdRes;
import android.support.annotation.LayoutRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.RestrictTo;
import android.support.annotation.StyleRes;
import com.google.android.material.internal.NavigationMenu;
import com.google.android.material.internal.NavigationMenuPresenter;
import com.google.android.material.internal.ScrimInsetsFrameLayout;
import com.google.android.material.internal.ThemeEnforcement;
import android.support.v4.content.ContextCompat;
import android.support.v4.view.AbsSavedState;
import android.support.v4.view.ViewCompat;
import android.support.v4.view.WindowInsetsCompat;
import android.support.v7.content.res.AppCompatResources;
import android.support.v7.view.SupportMenuInflater;
import android.support.v7.view.menu.MenuBuilder;
import android.support.v7.view.menu.MenuItemImpl;
import android.support.v7.widget.TintTypedArray;
Run Code Online (Sandbox Code Playgroud)
在我的应用程序构建gradle中,我依赖于:
implementation "androidx.appcompat:appcompat:1.0.2"
implementation "com.google.android.material:material:1.1.0-alpha01"
Run Code Online (Sandbox Code Playgroud)
由于我使用的是材料设计库的新依赖关系(这也是我的AndroidX迁移指南中给出的依赖关系),因此我期望所有类都具有正确的依赖关系。我在这里错了吗?这还没准备好吗?有人还有我想念的其他见解吗?