- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要按照标题所说的发送请求。我有一个完整的请求文本,这里是:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:api="https://api.myapi.org/api">
<soapenv:Header>
<api:Login soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<login xsi:type="xsd:string">my_login</login>
<password xsi:type="xsd:string">my_password</password>
</api:Login>
</soapenv:Header>
<soapenv:Body>
<api:GetHouseInfo>
<address>
<houseId>IDHOUSE</houseId>
</address>
</api:GetHouseInfo>
</soapenv:Body>
</soapenv:Envelope>
这里唯一发生变化的是 houseId,我需要在应用程序中选择的每个房子发送新的 houseId。我的应用程序执行大量 JSON 请求,因此我使用 Retrofit 2 来处理 em。所以我想设置模型,从模型创建这个请求并将其发送到服务器。但是怎么办?我在 Internet 上看到了一些信息,但这不是一回事 - 我有两个请求,我会说 - 一个在标题部分(登录名/密码),第二个在正文部分(houseId)。我尝试按原样发送字符串,但它不起作用。这是我的 Presenter 代码 (Moxy MVP):
@InjectViewState
public class HouseInfoPresenter extends BasePresenter<HouseInfoView> {
private static final String TAG = HouseInfoPresenter.class.getSimpleName();
public void getHouseInfo(String body) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(String.format("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:api=\"https://api.myapi.org/api\"><soapenv:Header><api:Login soapenv:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"><login xsi:type=\"xsd:string\">my_loging</login><password xsi:type=\"xsd:string\">my_password</password></api:Login></soapenv:Header><soapenv:Body><api:GetHouseInfo><address><houseId>%s</houseId></address></api:GetHouseInfo></soapenv:Body></soapenv:Envelope>", body));
String xml = stringBuilder.toString();
mCoreServices
.getXmlApiService()
.getApi()
.getHouseInfo(xml)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe(() -> getViewState().onShowProgressBar(true))
.doOnUnsubscribe(() -> getViewState().onShowProgressBar(false))
.subscribe(s -> {
getViewState().onSuccess("GOOD");
}, new ApiExceptionObservable(TAG) {
@Override
public void call(String message) {
getViewState().onShowErrorMessage(message);
}
@Override
public void unauthorized() {
getViewState().showUnauthorizedDialog();
}
});
}
}
但我什至无法得到正确答案。我以前处理过 XML 请求,但从未使用过 SOAP。
最佳答案
好的,我得到了解决方案,这是我创建的 Java 对象模型:
@Root(name = "soapenv:Envelope", strict = false)
public class XMLHouseInfoRequest {
public XMLHouseInfoRequest(String login, String password, String houseGuid) {
this.rootElement1 = new HouseInfoRequestHeader(login, password);
this.rootElement2 = new HouseInfoRequestBody(houseGuid);
}
@Attribute(name = "xmlns:soapenv")
private String soapenv = "http://schemas.xmlsoap.org/soap/envelope/";
@Attribute(name = "xmlns:api")
private String api = "https://api.myip.org/api";
@Element(name = "soapenv:Header")
public HouseInfoRequestHeader rootElement1;
@Element(name = "soapenv:Body")
public HouseInfoRequestBody rootElement2;
@Root
public static class HouseInfoRequestHeader {
public HouseInfoRequestHeader(String login, String password) {
this.login = new Login(login, password);
}
@Element(name = "api:Login")
public Login login;
@Root
public static class Login {
@Attribute(name = "soapenv:encodingStyle")
private String encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/";
public Login(String login, String password) {
this.login = login;
this.password = password;
}
@Element(name = "login")
private String login;
@Element(name = "password")
private String password;
}
}
@Root
public static class HouseInfoRequestBody {
public HouseInfoRequestBody(String houseGuid) {
this.getHouseInfo = new GetHouseInfo(houseGuid);
}
@Element(name = "api:GetHouseInfo")
public GetHouseInfo getHouseInfo;
@Root
public static class GetHouseInfo {
public GetHouseInfo(String houseGuid) {
this.address = new Address(houseGuid);
}
@Element(name = "address")
public Address address;
@Root
public static class Address {
public Address(String houseguid) {
this.houseguid = houseguid;
}
@Element(name = "houseguid")
private String houseguid;
}
}
}
}
这很好用。
关于android - 通过 Retrofit 2 发送 SOAP-XML 请求和获取 SOAP-XML 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45583355/
我正在尝试迁移我的应用程序以使用 RxJava。我已经在使用 Retrofit,因此我正在尝试使用方法返回 Observables 的 Retrofit 接口(interface)。但是我现在在针对它
我想 post 数据如下: { "user_id":"14545646", "list":["4545645","4545645","4545645","4545645"]
我是改造新手。我向网站发出 POST 请求。网站以 HTML 形式返回响应。所以我会解析它。但是 Retrofit 尝试将其解析为 JSON。怎么办? @FormUrlEncoded @POST("/
我想异步执行 2 个网络调用 - 我正在使用 Retrofit+RxJava 来完成这个。这个逻辑来自一个简单的 Runner 类来测试解决方案。注意:这主要涉及服务器端的 RxJava。 我的代码如
我最近在改造的存储库中使用 Flow。 Result 的密封类 enum class ApiStatus{ SUCCESS, ERROR, LOADING } sealed c
我目前正在开发 Retrofit2 客户端的错误处理部分(使用 Retrofit 的 Rx 实现)。 找了一段时间,没有找到简单的方法将Retrofit返回的ResponseBody反序列化到我报错的
我从 retrofit 更新到 retrofit2 后出现此错误。 FATAL EXCEPTION: OkHttp Dispatcher Process: nz.co.datacom.mars.jun
在使用 RxJava 和 Retrofit 2 时,我正在尝试创建单元测试来覆盖我的应用何时收到特定响应。 我遇到的问题是,在 Retrofit 2 中,我看不到在不使用反射的情况下创建 retrof
在 Retrofit 1.9.x 中有一个 RetrofitError.Kind.NETWORK这让您可以轻松确定故障是否由网络错误引起。在新的 2.0 API 中,我们不再有 RetrofitErr
有没有办法用Refit动态输入参数? 我的 Refit 界面中有这段代码: [Get("/click?{parm}")] Task> SaveClick(string parm
有没有办法用Refit动态输入参数? 我的 Refit 界面中有这段代码: [Get("/click?{parm}")] Task> SaveClick(string parm
我知道,Retrofit 在内部使用 OkHttp。但是,我可以看到一些开发人员提供了以下方法的应用 return new Retrofit.Builder() .baseUrl(Bu
在项目上安装这个库之后: compile 'io.reactivex.rxjava2:rxandroid:2.0.1' compile 'io.reactivex.rxjava2:rxjava:2.0
在 Retrofit 1.x 中,我使用以下模式创建 API 服务类,该类模拟某些构建变体的不良网络连接。 // Retrofit 1 private T create(Class apiServi
Retrofit请求API格式(Android): @POST("getOrderStatus") @Headers("Content-Type:application/json") Obser
当我实例化 RestAdapter 时,我的应用程序总是崩溃 private void submitForm(SignupForm form){ RestAdapter adapter = n
我正要从 retrofit 1.9 迁移到最新版本并遇到问题... 我的设置: 三星 Galaxy S7 Edge(Android 7) 改造 2.3 OkHttp 3.8 迁移后突然遇到这个问题:
我正在尝试在 2.5.1-SNAPSHOT 中使用 retrofit 的协程支持,但我不断收到一个奇怪的异常。 我的改造服务类有: @GET("weather") suspend fun getFor
我正在尝试 Ktor通过转换一些当前正在使用的现有项目 Retrofit . 虽然我可以很容易地将请求转换为: client.get { url("$BASE_URL/something/so
使用改造 2,如何为上传的文件设置动态名称? 目前是这样的: @Part("avatar\"; filename=\"image\" ") RequestBody image, 但是,上传的文件名将是
我是一名优秀的程序员,十分优秀!