Java HTTP Put请求使用Sun Jersey客户端1.19工作,但同一请求不使用SoapUI或Postman

Java HTTP Put请求使用Sun Jersey客户端1.19工作,但同一请求不使用SoapUI或Postman,java,rest,jersey,Java,Rest,Jersey,我有一个服务器,它提供RESTwebservice来编辑服务器数据库中的用户数据,开发该webservice的公司提供了一个使用com.sun.jersey.api.client的示例客户端,下面是示例代码: import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.config.ClientConfig; import com.sun.jersey.api.client.config.DefaultCli

我有一个服务器,它提供
REST
webservice来编辑服务器数据库中的用户数据,开发该webservice的公司提供了一个使用
com.sun.jersey.api.client
的示例客户端,下面是示例代码:

import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
import com.sun.jersey.api.client.filter.HTTPBasicAuthFilter;
import com.sun.jersey.api.client.filter.LoggingFilter;
import com.sun.jersey.api.representation.Form;
import java.util.Properties;

public class entryClass {

    private static Client client;
    private static ClientConfig config;
    private static String truststoreFileName = "C:\\trust.jks";
    private static String truststorePassword = "123456";
    private static String username = "mahmoud";
    private static String password = "Avaya123$";
    private static String uri = "https://avaya-smgr01.atcom.ae/web/mgmtwebservice";
    private final static String entityType = "user";
    private final static String entityXmlData = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><delta:deltaUserList xmlns:delta=\"http://xml.avaya.com/schema/deltaImport\" xmlns:ns3=\"http://xml.avaya.com/schema/import_sessionmanager\" xmlns:ns4=\"http://xml.avaya.com/schema/import_csm_b5800\" xmlns:ns5=\"http://xml.avaya.com/schema/import_csm_mm\" xmlns:ns6=\"http://xml.avaya.com/schema/import_csm_cm\" xmlns:ns7=\"http://xml.avaya.com/schema/import_csm_agent\" xmlns:ns8=\"http://xml.avaya.com/schema/import\" xmlns:tns=\"http://xml.avaya.com/schema/import\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://xml.avaya.com/schema/deltaImport userdeltaimport.xsd\"><delta:userDelta><loginName>ghaith@atcom.ae</loginName><commProfileSet><commProfileSetName>Primary</commProfileSetName><isPrimary>true</isPrimary><commProfileList><commProfile xmlns:ns9=\"http://xml.avaya.com/schema/import_csm_cm\" xsi:type=\"ns9:xmlStationProfile\"><commProfileType>CM</commProfileType><ns9:cmName>AVAYA-CM</ns9:cmName><ns9:useExistingExtension>true</ns9:useExistingExtension><ns9:extension>727</ns9:extension><ns9:cor>55</ns9:cor></commProfile></commProfileList></commProfileSet></delta:userDelta></delta:deltaUserList>";
    private final static String updateType = "merge";

    public static void main(String[] args) {
        Properties properties = System.getProperties();
        properties.put("javax.net.ssl.trustStore", truststoreFileName);
        properties.put("javax.net.ssl.trustStorePassword", truststorePassword);
        config = new DefaultClientConfig();
        client = Client.create(config);
        client.addFilter(new LoggingFilter(System.out));
        client.addFilter(new HTTPBasicAuthFilter(username, password));
        final Form form = new Form();
        form.add("entityType", entityType);
        form.add("entityXMLData", entityXmlData);
        form.add("updateMode", updateType);
        client.resource(uri).put(String.class, form);
    }
}
导入com.sun.jersey.api.client.client;
导入com.sun.jersey.api.client.config.ClientConfig;
导入com.sun.jersey.api.client.config.DefaultClientConfig;
导入com.sun.jersey.api.client.filter.HTTPBasicAuthFilter;
导入com.sun.jersey.api.client.filter.LoggingFilter;
导入com.sun.jersey.api.representation.Form;
导入java.util.Properties;
公共类入口类{
私有静态客户端;
私有静态客户端配置;
私有静态字符串truststoreFileName=“C:\\trust.jks”;
私有静态字符串truststorePassword=“123456”;
私有静态字符串username=“mahmoud”;
私有静态字符串password=“Avaya123$”;
私有静态字符串uri=”https://avaya-smgr01.atcom.ae/web/mgmtwebservice";
私有最终静态字符串entityType=“用户”;
私有最终静态字符串entityXmlData=”ghaith@atcom.aePrimarytrueCMAVAYA-CM72755”;
私有最终静态字符串updateType=“merge”;
公共静态void main(字符串[]args){
Properties=System.getProperties();
properties.put(“javax.net.ssl.trustStore”,truststoreFileName);
properties.put(“javax.net.ssl.trustStorePassword”,trustStorePassword);
config=newdefaultclientconfig();
client=client.create(config);
client.addFilter(新的LoggingFilter(System.out));
addFilter(新的HTTPBasicAuthFilter(用户名、密码));
最终形式=新形式();
添加(“entityType”,entityType);
添加(“entityXMLData”,entityXMLData);
add(“updateMode”,updateType);
client.resource(uri).put(String.class,form);
}
}
运行上述代码会得到以下输出:

1 * Client out-bound request
1 > PUT https://avaya-smgr01.atcom.ae/web/mgmtwebservice
1 > Authorization: Basic bWFobW91ZDpBdmF5YTEyMyQ=
updateMode=merge&entityType=user&entityXMLData=%3C%3Fxml+version%3D%221.0%22+encoding%3D%22UTF-8%22%3F%3E%3Cdelta%3AdeltaUserList+xmlns%3Adelta%3D%22http%3A%2F%2Fxml.avaya.com%2Fschema%2FdeltaImport%22+xmlns%3Ans3%3D%22http%3A%2F%2Fxml.avaya.com%2Fschema%2Fimport_sessionmanager%22+xmlns%3Ans4%3D%22http%3A%2F%2Fxml.avaya.com%2Fschema%2Fimport_csm_b5800%22+xmlns%3Ans5%3D%22http%3A%2F%2Fxml.avaya.com%2Fschema%2Fimport_csm_mm%22+xmlns%3Ans6%3D%22http%3A%2F%2Fxml.avaya.com%2Fschema%2Fimport_csm_cm%22+xmlns%3Ans7%3D%22http%3A%2F%2Fxml.avaya.com%2Fschema%2Fimport_csm_agent%22+xmlns%3Ans8%3D%22http%3A%2F%2Fxml.avaya.com%2Fschema%2Fimport%22+xmlns%3Atns%3D%22http%3A%2F%2Fxml.avaya.com%2Fschema%2Fimport%22+xmlns%3Axsi%3D%22http%3A%2F%2Fwww.w3.org%2F2001%2FXMLSchema-instance%22+xsi%3AschemaLocation%3D%22http%3A%2F%2Fxml.avaya.com%2Fschema%2FdeltaImport+userdeltaimport.xsd%22%3E%3Cdelta%3AuserDelta%3E%3CloginName%3Eghaith%40atcom.ae%3C%2FloginName%3E%3CcommProfileSet%3E%3CcommProfileSetName%3EPrimary%3C%2FcommProfileSetName%3E%3CisPrimary%3Etrue%3C%2FisPrimary%3E%3CcommProfileList%3E%3CcommProfile+xmlns%3Ans9%3D%22http%3A%2F%2Fxml.avaya.com%2Fschema%2Fimport_csm_cm%22+xsi%3Atype%3D%22ns9%3AxmlStationProfile%22%3E%3CcommProfileType%3ECM%3C%2FcommProfileType%3E%3Cns9%3AcmName%3EAVAYA-CM%3C%2Fns9%3AcmName%3E%3Cns9%3AuseExistingExtension%3Etrue%3C%2Fns9%3AuseExistingExtension%3E%3Cns9%3Aextension%3E727%3C%2Fns9%3Aextension%3E%3Cns9%3Acor%3E55%3C%2Fns9%3Acor%3E%3C%2FcommProfile%3E%3C%2FcommProfileList%3E%3C%2FcommProfileSet%3E%3C%2Fdelta%3AuserDelta%3E%3C%2Fdelta%3AdeltaUserList%3E
1 * Client in-bound response
1 < 200
1 < Cache-Control: no-cache, no-store, must-revalidate
1 < Connection: keep-alive
1 < Set-Cookie: avaya-smgr01.atcom.ae=1gFtZiuD53fAwbKWNBCTjBl2PWFuZ4_FwiiE0Oo535NMf70FsGdJp-2pC2kUcn8C*AAJTSQACMDE.*; path=/; secure; HttpOnly
1 < Set-Cookie: JSESSIONID=DmYwtUKB18qGIWfAlEmQcK5D1-NNgPmOHiO95SmJ.avaya-smgr01; path=/web; Max-Age=0; Expires=Thu, 01-Jan-1970 00:00:00 GMT
1 < Pragma: no-cache
1 < Expires: 0
1 < Content-Length: 104
1 < X-XSS-Protection: 1; mode=block
1 < Date: Sat, 28 Dec 2019 08:38:19 GMT
1 < Content-Type: application/xml
1 < 
Operation=Update User, LoginId: mahmoud, Action: Update, merge, Object=ghaith@atcom.ae, Status: Success
1*客户端出站请求
1>放https://avaya-smgr01.atcom.ae/web/mgmtwebservice
1>授权:基本BWFOBW91ZDPDMF5YTEYQ=
updateMode=merge&entityType=user&entityXMLData=%3C%3Fxml+版本%3D%221.0%22+编码%3D%22UTF-8%22%3F%3E%3Cdelta%3DeltaUserList+xmlns%3Delta%3D%22http%3A%2F.avaya.com%2Fschema%2FdeltaImport%22+xmlns%3Ans3%3D%22http%3A%2F%2Fxml.avaya.com%2Fschema%2Fschema%2Fschema%2F%2F%2F%2F%2Fxml.avaya.com%2Fschema%2Fschema%2F%2F导入会话管理器%22+3ANSU%2F%2F%2Fxml.com%2F%CSU%2F%5800%22+xmlns%3Ans5%3D%22http%3A%2F%2Fxml.avaya.com%2Fschema%2import\u csm\u mm%22+xmlns%3Ans6%3D%22http%3A%2F%2Fxml.avaya.com%2Fschema%2Fimport\u csm\u cm%22+xmlns%3Ans7%3D%22http%3A%2Fxml.2Fxml.com%2Fschema%2Fimport\u csm\u代理%22+xmlns%3Ans8%3D%22http%3A%2fya.com%2fxa%2fxmlns%2fxmlschema%2fxmlns%2f3a%2fxmlschema%2F.com%2fxmlschema%2fxmlns%2Fxml%2fxmlns%2Fxml%2fxm端口%22+xmlns%3Axsi%3D%22http%3A%2F%2Fwww.w3.org%2F2001%2FXMLSchema实例%22+xsi%3schemaLocation%3D%22http%3A%2F%2Fxml.avaya.com%2Fschema%2FdeltaImport+userdeltaimport.xsd%22%3E%3cddelta%3userdelta%3E%3loginname%3Eghaith%40atcom.ae%3C%2FloginName%3E%3cprofileset%3E%3E%3E%3E%3E%3E%3E配置文件集%3E%3E%3E%3E配置文件集%3E%3E主要名称%3Cue%3C%2F%2Fxml.avaya.com%2Fschema%2fcimport\u csm\u cm%22+xsi%3AxmlStationProfile%22%3E%3CcommProfile+xmlns%3Ans9%3eComprofileType%3ECM%3C%2fcomprofiletype%3ECM%3C%3C%2fcomprofiletype%3E%3Cns9%3ecmname%3EAVAYA-cm%3C%3Cns9%3acmnas9%3acmnasname%3E%3E%3c9%3usestingue现有扩展%3c9%3usestingex%3cs9%3nse张力%3E727%3C%2Fns9%3Extension%3E%3Cns9%3Cor%3E55%3C%2Fns9%3Cor%3E%3C%2CommProfile%3E%3C%2CommProfileList%3E%3C%2Fdelta%3UserDelta%3E%3C%2Fdelta%3DeltaUserList%3E
1*绑定响应中的客户端
1 < 200
1<缓存控制:无缓存,无存储,必须重新验证
1<连接:保持活动
1
我试图在SoapUI或Postman上复制相同的请求,但服务器一直给出禁止403

我从代码中了解到:

  • 请求需要基本的HTTP身份验证
  • 请求通过HTTPS发送,因此必须有一个信任存储 包含服务CA
  • Jersey将请求编码为URL编码的请求,并使用 URI中作为请求参数的值如下:
    https://avaya-smgr01.atcom.ae/web/mgmtwebservice?updateMode=merge&entityType=user&entityXMLData=%3C%3Fxml+版本%3D%22……%3E
我已经尝试使用postman和soapui使用编码格式调用URL,并在这两种格式上设置了基本HTTP身份验证和禁用了URL格式,但服务器仍然使用禁止403进行响应。还试图让SoapUI和Postman对请求进行编码,但仍然出现相同的错误


有人能告诉我我遗漏了什么吗?

HTTP PUT请求应该在正文中指定值,而不是在URL的查询参数中指定值。

我们使用什么代码将数据以应用程序/x-www-form-urlencoded数据类型的形式放入请求正文中。这就是
表单
类的用途。您正在尝试将数据放入查询字符串中。表单urlencoded和查询参数之间的实际数据格式实际上完全相同。它只是一个进入正文,一个进入URL。因此,您需要更改[Body]选项卡。