Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >两种不同soap版本的系统属性"javax.xml.soap.MessageFactory“

两种不同soap版本的系统属性"javax.xml.soap.MessageFactory“
EN

Stack Overflow用户
提问于 2017-01-25 00:39:30
回答 1查看 12.8K关注 0票数 9

我需要与我的应用程序中的两个with服务进行通信。对于一个webservice,我需要使用soap1_1版本,而对于另一个soap版本,需要使用soap1_2。

客户1:

代码语言:javascript
运行
AI代码解释
复制
public class SoapClient1 {


protected static Logger _logger = Logger.getLogger ("TEST");
private static Long retryDelay = null;


public String sendSoapMessage (String xml) throws Exception {

    SOAPMessage resp  = null;
    String response = null;
    String endpoint = "http:xxxx";



    System.setProperty("javax.xml.soap.MessageFactory","com.sun.xml.internal.messaging.saaj.soap.ver1_2.SOAPMessageFactory1_2Impl");
    SOAPConnectionFactory connectionFactory = SOAPConnectionFactory.newInstance();
    SOAPConnection soapConnection = connectionFactory.createConnection();

    long start = System.currentTimeMillis();
    long end = System.currentTimeMillis();

    //URL endPoint = new URL(endpoint);

    //setting connection time out and read timeout

    URL endPoint = new URL (null, endpoint, new URLStreamHandler () {
        @Override
        protected URLConnection openConnection (URL url) throws IOException {

            URL clone = new URL (url.toString ());
            URLConnection connection = clone.openConnection ();
            connection.setConnectTimeout (60000);
            connection.setReadTimeout (60000);
            // Custom header

            return connection;
        }});


    try{

        start = System.currentTimeMillis();


            resp = soapConnection.call(getSoapRequest(xml), endPoint);      

        end = System.currentTimeMillis();

        ByteArrayOutputStream os = new ByteArrayOutputStream();
        resp.writeTo(os);
        response = os.toString();


        if (!resp.getSOAPBody().hasFault()) {

            response = "SucCess:" + response;

            }else{

                response = "FaiLure:" + response;
            }

        }else{

            response = "FaiLure:" + response;
        }


    }catch(SOAPException se){
        _logger.log(Level.ERROR," Service Provisioning Call Failed");
        _logger.log(Level.ERROR,"The call duration before SOAPException =" +(end-start)+" ms.");

        se.printStackTrace();
        throw se;
    }

    soapConnection.close();
    return response;
}


private SOAPMessage getSoapRequest(String xml) throws SOAPException,Exception{

    MessageFactory mf = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);
    /* Create a SOAP message object. */
    SOAPMessage soapMessage = mf.createMessage();
    SOAPPart soapPart = soapMessage.getSOAPPart();
    SOAPEnvelope soapEnvelope = soapPart.getEnvelope();
    SOAPBody soapBody = soapEnvelope.getBody();
    soapEnvelope.getHeader().detachNode();
    soapEnvelope.addNamespaceDeclaration("soap","http://yyyy");
    SOAPHeader header = soapEnvelope.addHeader();



    DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
    builderFactory.setNamespaceAware(true);

    InputStream stream  = new ByteArrayInputStream(xml.getBytes());
    Document doc = builderFactory.newDocumentBuilder().parse(stream);

    _logger.log(Level.DEBUG, "Adding SOAP Request Body");
    soapBody.addDocument(doc);

    soapMessage.saveChanges();

    return soapMessage;

}
}

样本请求

代码语言:javascript
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
       <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:soap="http://bridgewatersystems.com/xpc/tsc/entity/soap">
      <env:Header/>
        <env:Body>
             <TempTierChangeRequest xmlns="http://bridgewatersystems.com/xpc/tsc/entity/soap" credentials="root" principal="root">
           <temp-tier-change xmlns="">
                <service-components>
                     <service-component name="DSL_Tier_2"/>
                </service-components>
                <duration-sec>300</duration-sec>
                <description>1024 SC</description>
                <activation-date>2017-02-09T10:29:16</activation-date>
                <subscriber-id>26752018010@wholesale1.com</subscriber-id>
                <partition-key>26752018010</partition-key>
                <ttc-id>3706043</ttc-id>
                <validity-period>
                     <duration>30</duration>
                     <expires-with-billing-reset>1</expires-with-billing-reset>
                </validity-period>
           </temp-tier-change>
      </TempTierChangeRequest>
      </env:Body>
      </env:Envelope>
EN

回答 1

Stack Overflow用户

发布于 2017-02-04 01:32:15

不可能为两个不同的目的设置系统变量javax.xml.soap.MessageFactory的值。默认值设置为SOAP1.1

删除系统属性javax.xml.soap.MessageFactory,并根据您正在构建的客户端类型使用

使用MessageFactory.newInstance()构建soap消息的

如果要使用SOAP1.1,请使用默认构造函数

代码语言:javascript
运行
AI代码解释
复制
 MessageFactory factory = MessageFactory.newInstance();

如果您想要SOAP1.2,请使用

代码语言:javascript
运行
AI代码解释
复制
MessageFactory factory = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);

Java教程

使用注释@BindingType配置的JAX-WS客户端

当JAX客户端使用注释配置时,使用@BindingType,例如,如果客户端是从WSDL生成的。将注释添加到端口,以将绑定设置为SoapBinding.SOAP11HTTP_BINDINGSoapBinding.SOAP12HTTP_BINDING

代码语言:javascript
运行
AI代码解释
复制
@WebService(targetNamespace = "https://myservice.services.com", name = "myserviceProxyProt")
@BindingType(javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING)
public interface MyServiceProxyPort {
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41846856

复制
相关文章
POST表单数据
在之前的文章中,我们了解到了如何进行API的简单调用,这仅仅输入 GET类型的操作,而现在我们需要对网站进行POST。
摸鱼的G
2023/02/22
6960
Django 2.1.7 处理ajax请求、GET、POST请求
在业务处理的工作中,在同一个视图处理上,可能会有普通的GET、POST请求,还会有ajax请求。 那么怎么在处理这些请求的时候做上区分呢?
Devops海洋的渔夫
2019/09/18
1.5K0
Django 2.1.7 处理ajax请求、GET、POST请求
使用AJAX获取Django后端数据
使用Django服务网页时,只要用户执行导致页面更改的操作,即使该更改仅影响页面的一小部分,它都会将完整的HTML模板传递给浏览器。但是如果我们只想更新页面的一部分,则不必完全重新渲染页面-这时候就要用到AJAX了。
子润先生
2021/06/16
7.7K0
Django学习笔记 1.4 表单和通用视图
更新一下在上一个教程中编写的投票详细页面的模板 (“polls/detail.html”) ,增加一个 HTML 元素:
twowinter
2020/04/17
8190
Django MVT之V
在Django MVC概述和开发流程中已经讲解了Django的MVT开发流程,本文重点对MVT中的视图(View)进行重点讲解。
菜菜cc
2022/11/15
1.9K0
Django MVT之V
Django之视图层与模板层
视图函数(类)简称为视图,就是一个普通的函数(类),它的功能是接收web请求,并返回web响应.
GH
2019/12/16
9.3K0
011:Django高级表单
本章知识点 1、Django表单类 2、自定义文件上传 3、Ajax post数据
李玺
2021/11/22
3140
011:Django高级表单
通过Ajax提交表单的数据
当监听到表单的提交事件后,可以调用事件对象的 event.preventDefault()函数,来阻止表单的提交和页面的跳转,示例代码如下:
岳泽以
2022/10/26
2.4K0
ajax post请求之后 实现页面跳转和带参数跳转问题
url, {method:"regist",userName:$nameEle.val(),email:$emailEle.val(),password:$passwordEle.val()}, function(data) { //alert(data); //注册成功页面跳转, window.location.href ="../client/login.html"; }
wust小吴
2019/07/05
5.4K0
005:Django Form请求
1. Django 请求 传递数据的方式 Form表单 Ajax Url get请求 我们研究request参数 在视图当中,大部分函数有request参数,request这个参数是当URL调用视图函数的时候接收 传递的请求。 Request接收的就是一个请求 Request.META 请求当中携带的参数 HTTP_USER_AGENT:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:64.0) Gecko/20100101 Firefox/64.0 浏览器版本 Form表单 Action 请求的地址 地址为空,请求自己的地址 Method 请求的方式 Post 发送,密文的 Get 获取,明文 在URL之后以?开始,以键=值的形式以&分割 Input name是传递参数时候的键 Submit
李玺
2021/11/22
5960
005:Django Form请求
Django之视图层
  一个视图函数,简称视图,是一个简单的python函数,接收web请求并返回web响应。响应可以是一张网页的HTML内容,一个重定向,一个404错误等。在函数中必须写一个request的参数,然后必须要有返回值,中间的逻辑随便,整个函数写在哪里也无所谓,只要python目录下就行,但我们默认规定,视图函数一般都写在每个应用下面views.py文件里。
py3study
2020/01/19
1.8K0
django 1.8 官方文档翻译: 3-4-3 使用基于类的视图处理表单
你自己实现这些功能经常导致许多重复的样本代码(参见在视图中使用表单)。为了避免这点,Django 提供一系列的通用的基于类的视图用于表单的处理。
ApacheCN_飞龙
2022/11/27
1.9K0
php接受不到ajax的post数据
今天我在开发中遇到了一种情况: 我从html头信息里可以看到post传过去的数据,甚至打印ajax返回的json也是可以,但唯独加上键以后就变成了undefined。也就是说js并没有识别该json 解决方法:eval()函数转换:eval() 函数会将传入的字符串当做 JavaScript 代码进行执行。
九霄道长
2021/03/02
1.7K0
django 用表单验证数据
使用Field可以是对数据验证的第一步。你期望这个提交上来的数据是什么类型,那么就使用什么类型的Field。
用户2200417
2023/01/29
6390
09.Django基础七之Ajax
    AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步的Javascript和XML”。即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML,现在更多使用json数据)。
changxin7
2019/09/30
3.7K0
09.Django基础七之Ajax
Django数据库查询优化与AJAX
每一列属性都是不可再分的,两列的属性相近或相似或一样,应尽量合并属性一样的列,确保不产生冗余数据。
GH
2019/12/16
2.4K0
Django数据库查询优化与AJAX
Django 视图层
PyCharm可以使用virtualenv中的功能来创建虚拟环境。PyCharm紧密集成了virtualenv,所以只需要在setting中配置即可创建虚拟环境。而且PyCharm捆绑了virtualenv,我们不需要单独安装,一般创建过程如下:
py3study
2020/01/19
1.8K0
03.Django基础三之视图函数
  一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应。
changxin7
2019/09/29
5K0
03.Django基础三之视图函数
100:Django完整学员管理项目、傻瓜式流程讲解
创建APP 1、切入项目目录 2、创建app (djangoProject) E:\pythonProject>cd STUDB
李玺
2021/11/22
5030
100:Django完整学员管理项目、傻瓜式流程讲解
Django:表单字段如何在模板中用中文
1、表单汉化:是针对用户的。用户浏览网页时,表单的名称如果是英文的,不够友好,所以需要显示为中文,虽然代码编写还是英文。 2、Admin后台汉化:是针对网站管理员的。因为Admin后台是数据库直接注册的,所以要想汉化后台内容,其实是对数据库(如字段名)操作的。2种汉化的对象不一样。
py3study
2020/01/16
1.6K0

相似问题

证据表明没有证据表明

120

按证据权重取代名义变量类别

14

装配证据

23

坚持要有证据

110

Scala型证据

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档