如果服务器返回错误,我在检索Json响应时遇到问题.详情见下文.
我用java.net.HttpURLConnection
.我设置了请求属性,然后我做:
conn = (HttpURLConnection) url.openConnection();
Run Code Online (Sandbox Code Playgroud)
在那之后,当请求成功时,我得到了Json的回复:
br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
sb = new StringBuilder();
String output;
while ((output = br.readLine()) != null) {
sb.append(output);
}
return sb.toString();
Run Code Online (Sandbox Code Playgroud)
当服务器返回50x或40x之类的错误时,我无法检索收到的Json.以下行抛出IOException:
br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
// throws java.io.IOException: Server returned HTTP response code: 401 for URL: www.example.com
Run Code Online (Sandbox Code Playgroud)
服务器确定发送正文,我在外部工具Burp Suite中看到它:
HTTP/1.1 401 Unauthorized
{"type":"AuthApiException","message":"AuthApiException","errors":[{"field":"email","message":"Invalid username and/or password."}]}
Run Code Online (Sandbox Code Playgroud)
我可以使用以下方法获得响应消息(即"内部服务器错误")和代码(即"500"):
conn.getResponseMessage();
conn.getResponseCode();
Run Code Online (Sandbox Code Playgroud)
但我无法检索请求正文...也许有一些方法我没有在库中注意到?
我正在尝试使用commonjs-utils中的node.js + json-schema.js来验证我的JSON API.只需单个验证就很容易,但无法找到正确的方法来管理多个模式文件以实现相互引用.
假设我有两个模型和两个API.
// book
{
"type": "object",
"properties": {
"title": { "type": "string" },
"author": { "type": "string" }
}
}
// author
{
"type": "object",
"properties": {
"first_name": { "type": "string" },
"last_name": { "type": "string" }
}
}
// authors API
{
"type": "array",
"items": { "$ref": "author" }
}
// books API: list of books written by same author
{
"type": "object",
"properties": {
"author": { "$ref": "author" }
"books": { "type": "array", "items": …
Run Code Online (Sandbox Code Playgroud) 在过去的几周里,我正在使用Appium(python)
Android进行测试,但昨天我们决定转向Expresso(Java)
进行自动化测试.我们为什么要做这个转变有几个原因:
我们希望扩展自动化测试,并且appium中没有很多功能.
这是Android的最新测试框架之一,具有良好的向后兼容性.
我一直在阅读浓缩咖啡,但我找不到任何好的东西,如果我将它与Appium进行比较.我是一个Python/R developer
也许有几点我无法理解.有谁愿意帮助我了解这个新测试框架的转变是否对未来有利?我错过了这里更大的图片,任何帮助将不胜感激.
我想检查我的git设置的合并工具 - 我只是不记得名字.我知道我可以等到下一个合并机会来运行它git merge tool
并查看它是什么,但我想输入类似于git mergetool status
查看工具的内容(例如,版本是什么).
我成功运行appium java脚本.但问题是,我的应用程序以登录页面开始.登录后,我可以自动化一些测试用例.但我想再次从登录页面通过脚本来运行下一个测试用例..如何关闭应用程序以及后台模式并重新打开应用程序而无需再次重新安装应用程序?因为测试用例不应该相互依赖
public class AppTest {
private static RemoteWebDriver driver;
@BeforeClass
public static void initSimulator() throws MalformedURLException
{
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("platformName", "Android");
capabilities.setCapability("platformVersion", "5.0.1");
capabilities.setCapability("deviceName", "emulator-5554");
capabilities.setCapability("app", "D:\\adt-bundle-windows-x86_64-20140702\\sdk\\platform-tools\\Yr.apk");
capabilities.setCapability("app-package", "com.you.android");
capabilities.setCapability("app-activity", "com.yr.sts.SplashActivity");
capabilities.setCapability("app_wait_activity",".MainActivity");
driver = new RemoteWebDriver(new URL("http://127.0.0.1:4723/wd/hub"),
capabilities);
System.out.println("App Launched");
}
@AfterClass
public static void quitDriver()
{
driver.quit();
System.out.println("Driver has been Quit");
}
@Test
public void sign_in_Click() throws InterruptedException
{
WebElement sign_button = driver.findElement(By.name("Sign-in"));
sign_button.click();
WebElement usr = driver.findElement(By.id("com.you.android:id/et_login_email_or_mobile"));
usr.sendKeys("hello1@gmail.com");
Thread.sleep(2000);
WebElement passwrd = driver.findElement(By.id("com.you.android:id/et_login_pwd"));
passwrd.sendKeys("123456789"); …
Run Code Online (Sandbox Code Playgroud) 我的目标是将一个对象的字段复制到另一个对象中,但只复制那些非空的对象.我不想明确指定它.更通用的解决方案非常有用且易于维护,即在REST API中实现PATCH,您只允许提供特定字段.
我看到了这个类似的线程,我正在尝试从这里实现一些想法:Helper,以便将非null属性从对象复制到另一个?(JAVA)
但是程序执行后对象不会以任何方式改变.
所以这是我创建的示例类,例如:
class Person {
String name;
int age;
Pet friend;
public Person() {
}
public Person(String name, int age, Pet friend) {
this.name = name;
this.age = age;
this.friend = friend;
}
// getters and setters here
}
class Pet {
String name;
int age;
public Pet(String name, int age) {
this.name = name;
this.age = age;
}
// getters and setters here
}
Run Code Online (Sandbox Code Playgroud)
这是我重写的copyProperty方法:
import org.apache.commons.beanutils.BeanUtilsBean;
import java.lang.reflect.InvocationTargetException;
public class MyBeansUtil extends BeanUtilsBean { …
Run Code Online (Sandbox Code Playgroud) 我阅读了很多这方面的主题并进行了数百次实验,但到目前为止还没有成功。我有以下课程:
class Parent {
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL/*, orphanRemoval=true*/)
private List<Child> children = new ArrayList<>();
class Child {
@ManyToOne(cascade = {CascadeType.ALL})
@JoinColumn(name = "parentId", nullable = false)
@JsonIgnore
Parent parent;
}
Run Code Online (Sandbox Code Playgroud)
我所做的就是尝试将children
列表替换为 PATCH 请求中提供的列表:
Hibernate.initialize(fromDb.getChildren());
entityManager.detach(fromDb); // detach from JPA. I need this
List<Child> newChildren = fromClient.getChildren();
fromDb.getChildren().clear(); // get rid of all old elements
for (Child child : newChildren) { // add the new ones
child.setParent(fromDb);
fromDb.getChildren().add(child);
}
ParentRepository.save(merged);
Run Code Online (Sandbox Code Playgroud)
行为如下:
orphanRemoval=true …
我对java上的gwt会话并不太了解.我对它有些怀疑.任何人都可以检查下面的实现是否需要完成.
public class ServiceImpl extends RemoteServiceServlet implements Service
{
void CreateSession(String Username)
{
HttpServletRequest request = this.getThreadLocalRequest();
HttpSession session = request.getSession();
session.setAttribute("Username", Username);
}
boolean ValidateSession(String Username)
{
HttpServletRequest request = this.getThreadLocalRequest();
HttpSession session = request.getSession();
if (session.getAttribute("Username"))
{
return true;
}
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
这是实现这两个功能的正确方法吗?
假设我有一个 ISO 8601 格式的日期:"2017-01-10T14:55:32+01:00"
。
如何将其转换为OffsetDateTime?
我在这里没有找到任何答案。我尝试了以下操作:
public OffsetDateTime stringToOffsetDateTime() {
return OffsetDateTime.from(Instant.parse("2019-12-12T10:39:40-02:00"));
}
Run Code Online (Sandbox Code Playgroud)
但它抛出DateTimeParseException
.
我尝试对 Android 应用程序进行测试自动化。我有来自开发人员的活动名称和包名称,所以它是正确的。我在访问活动时遇到问题。
我研究了很多,我看到了一些类似的主题,比如:
Android:java.lang.SecurityException:权限拒绝:启动意图 https://discuss.appium.io/t/error-a-new-session-could-not-be-created-for-android-appium/2571
当我输入./adb shell am start com.companyname.appname/com.companyname.appname.activities.MainActivity我收到以下消息:
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.companyname.appname/.activities.MainActivity }
java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.companyname.appname/.activities.MainActivity } from null (pid=13786, uid=2000) not exported from uid 10101
at android.os.Parcel.readException(Parcel.java:1465)
at android.os.Parcel.readException(Parcel.java:1419)
at android.app.ActivityManagerProxy.startActivityAsUser(ActivityManagerNative.java:2133)
at com.android.commands.am.Am.runStart(Am.java:680)
at com.android.commands.am.Am.onRun(Am.java:270)
at com.android.internal.os.BaseCommand.run(BaseCommand.java:47)
at com.android.commands.am.Am.main(Am.java:76)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:243)
at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)
当我尝试使用 Appium 运行该应用程序时,它会抛出以下内容:
[31mMessage: [0m[31morg.openqa.selenium.SessionNotCreatedException: A new session could not be created. (Original error: Permission to start activity …
Run Code Online (Sandbox Code Playgroud)