python 调用 Java 代码示例

来吧,展示:

import os
import jpype

def open_jvm():
    """开启Java虚拟机(JVM)"""
    # # 获取jvm.dll 的文件路径
    # jvmPath = jpype.getDefaultJVMPath()
    jpype.startJVM("-ea", convertStrings=True)

def add_jars_directory(path):
    """从给定目录中导入所有jar包,路径不能有中文,必须在开启虚拟机之前"""
    if os.path.isdir(path):
        jpype.addClassPath(os.path.join(path, "*"))
    else:
        raise TypeError("不是文件夹")

def add_jar(jar_path):
    """导入某个指定路径的jar包,,必须在开启虚拟机之前"""
    if os.path.isfile(jar_path) and jar_path.endswith("jar"):
        jpype.addClassPath(jar_path)
    else:
        raise TypeError("不是jar文件")

def java_obj(class_name):
    """给定java完整类名,获取java对象"""
    return jpype.JClass(class_name)

##############################################################

def send_message(cmpp_path=r'D:\cmpp',src_terminal_id="106575218526",dest_terminal_id=["17625089882"],msg_content="5128185260073",reserve="123"):
    """
    需提前将config.xml文件配置好并放在文件夹下
    具体是哪个文件夹可以先运行后从报错信息中获取
    : @param cmpp_path 存放Cmpp.jar和smproxy_cmpp.jar的路径
    : @param src_terminal_id 源终端MSISDN号码
    : @param dest_terminal_id 接收业务的MSISDN号码,可以有多个
    : @param msg_content 消息内容
    : @param reserve 保留内容
    """
    add_jars_directory(cmpp_path)    # 导入jar包
    print("1")
    open_jvm()           #  开启java虚拟机
    print("2")
    # 构造短信对象
    CMPPSubmitMessage = java_obj("com.huawei.smproxy.comm.cmpp.message.CMPPSubmitMessage")   # 2
    msg = CMPPSubmitMessage(1,                  # @param pk_Total 相同msg_Id消息总条数
                            1,                  # @param pk_Number 相同msg_Id的消息序号
                            1,                  # @param registered_Delivery 是否要求返回状态报告
                            1,                  # @param msg_Level  信息级别
                            "websms",           # @param service_Id 业务类型
                            0,                  # @param fee_UserType 计费用户类型字段
                            "",                 # @param fee_Terminal_Id 被计费用户的号码
                            0,                  # @param tp_Pid GSM协议类型
                            0,                  # @param tp_Udhi GSM协议类型
                            15,                  # @param msg_Fmt 消息格式    8或15
                            "900100",           # @param msg_Src 消息内容来源
                            "02",               # @param fee_Type 资费类别
                            "10",               # @param fee_Code 资费代码(以分为单位)
                            java_obj("java.util.Date")(jpype.java.lang.System.currentTimeMillis() + 172800000),
                                                # @param valid_Time 存活有效期
                            None,               # @param at_Time 定时发送时间
                            src_terminal_id,    # @param src_Terminal_Id 源终端MSISDN号码
                            dest_terminal_id,   # @param dest_Terminal_Id 接收业务的MSISDN号码
                            jpype.JString(msg_content).getBytes(),  # @param msg_Content 消息内容
                            reserve             # @param reserve    保留内容
                            )
    # 建立连接并发送短信
    return java_obj("demo.cmppdemo20.WebSMSender").getInstance().send(msg)
print("开始发短信")
send_message()
print("短信发送结束")