为什么C#动态调用Java的cxf多了bool型参数

最近的一个项目需要C#调用Java的cxf发布的接口,接口参数文档只给我的是两个long型,但是通过我动态加载发现,参数是四个。

比如接口文档给的接口是

TestFunc(long, long);

而我通过动态加载,反射后发现接口为

TestFunc(long, bool, long, bool);

之前一直怀疑是否接口文档没有及时更新,造成的错误。不过后面空闲后仔细跟踪了代码,并用reflector反射了动态编译的dll。

发现dll中多出的bool参数的名称很有规律。

比如上面接口反射出来的具体参数名为

TestFunc(long userid, bool useridSpecified, long sno, bool snoSpecified);

看见没,bool的参数名就是前面long型的参数名加上Specified。

在网上搜索了很久,搜索【c#动态调用cxf 多参数】,一直搜索不到结果,最后用【c# Specified属性】好不容易才搜到一篇文章

http://blog.csdn.net/xiaogui340/article/details/8548847

才明白原来这个多出来的属性表示是否序列化其对应参数,并且string型参数是不需要这个属性的。

因为java接口不是我写的,我第一次调用,也不能清楚知道是否如文中所述,如果没有此属性,则int,datetime之类的类型不能传到服务端。

不过我这次参数个数增多,那肯定是由于这个原因而增加的属性。

时间: 2024-08-25 04:32:36

为什么C#动态调用Java的cxf多了bool型参数的相关文章

c调用java

public class MainActivity extends AppCompatActivity { private JNI jni; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); jni = new JNI(); } public void test1(Vie

六、Android学习笔记_JNI_c调用java代码

1.编写native方法(java2c)和非native方法(c2java): package com.example.provider; public class CallbackJava { // C调用java空方法 public void helloFromJava() { System.out.println("hello from java"); } // C调用java中的带两个int参数的方法 public int Add(int x, int y) { int res

03_Android NDK中C语言调用Java代码,javah的使用,javap的使用以及生成签名,Android.mk的编写,C代码的编写

?? 1  案例场景,通过C语言回调Java的代码,案例的最终界面: 2  案例的代码结构如下: 3 编写DataProvider的代码: package com.example.ndkcallback; public class DataProvider { //C调用java空方法 public void helloFromJava(){ System.out.println("哈哈哈  我被调用了"); } //C调用java中的带两个int参数的方法 public int Ad

cocos2d-x笔记5: 通过jni实现C++调用Java

Cocos2d-x的跨平台性很强大,但是偶尔也需要平台的原生API结合. C++在Win32平台下简单的很,C++可以直接用MFC或者调用Win32API. Ios在XCode下直接就能C++和OC混编. 而Android又一次悲剧了,C++既不是Android的原生语言,也没有IDE可以混编... 我们只好通过jni来搞. Cocos2d-x 给我们提供了JniHelper类(良心!).头文件 #include "platform/android/jni/JniHelper.h".通

Android学习笔记_JNI_c调用java代码

1.编写native方法(java2c)和非native方法(c2java): package com.example.provider; public class CallbackJava { // C调用java空方法 public void helloFromJava() { System.out.println("hello from java"); } // C调用java中的带两个int参数的方法 public int Add(int x, int y) { int res

Delphi Dll 动态调用例子(3)-仔细看一下

http://blog.163.com/bxf_0011/blog/static/35420330200952075114318/ Delphi 动态链接库的动态和静态调用 为了让人能快速的理解 静态调用.动态调用,现在做一个函数封装在一个DLL中,然后在APPLICATION form里面调用这个函数,这个函数处理两个数的和.用代码和图片说话:代码如下 library Project1; { Important note about DLL memory management: ShareMe

Ruby学习之动态调用

作为一个动态语言,对象中的方法不会像静态语言一样需要验证确实存在,动态语言的对象之间一直保持着交谈,如果你调用一个不曾定义过的方法,程序也不会马上就报错而无法运行,只有当运行到你调用这个方法时,解释器会由于找不到该方法而无法继续解释.而在这之前,你可以在运行的过程中添加该方法.你甚至可以用一个方法来处理所有不曾定义过的方法,而做出某些反应. 方法重复 引用书上的一个例子,有一个报价系统,你需要从数据库中读取各种仪器设备的信息.价格,比如购买一台电脑,需要读取cpu.鼠标.键盘等信息.你可能需要一

python 动态调用函数

1. 根据字符串名称 动态调用 python文件内的方法eval("function_name")(参数) 2. 根据字符串 动态调用类中的静态方法,getattr(ClassName,"function_name")(参数) 3. apply(functoin_name,parameters)  这个function_name不是字符串,而是函数对象本身:parameters是参数,类似(a,b,...)这样的格式 4. 当函数不确定参数的数目时候,采用 一个 *

Java父类对象调用子类实体:方法重写与动态调用

众所周知Java的handle和C++的ponter而不是object对应,我们很熟悉C++的父类pointer调用子类实体的例子,那么对于Java的handle是不是也可以这样呢? 这里我先给一个例子 class Father{ public void announce(){ System.out.println("Father"); } } class Child extends Father{ @Override public void announce(){ System.ou