如燕盘旋而来的思念 2014-01-17 02:04 采纳率: 0%
浏览 3942

CXF动态生成client调用服务端,服务端收到参数为空,请教如何解决?

请教大家一个问题。

java做客户端,c#做服务端。java用apache.cxf的DynamicClientFactory或者JaxWsDynamicClientFactory根据wsdl生成client,调用服务端传递UserSyncData对象,服务端方法收到的参数对象是null,请问大家有解决办法吗?(需求:一定要用动态生成客户端的方式)

传递的对象UserSyncData 是jdk或者用cxf的wsdl2java在本地生成的pojo,服务端接受的参数就是空。如果用代理服务类的方式调用,是可以成功的,可以正常收到参数。但是我的项目要求用动态方式调用,所以来请教大家

java中调用的代码
CSDN移动问答

.net服务端方法:打断点看到userSyncData为null
CSDN移动问答

我自己分析可能是pojo对象在java和c#中定义要达成某种规范,仅是猜测,也不知道应该怎么做。以前和同时调试hessian的时候,要求java和c#的pojo必须一模一样,包括namespace也必须一样,我按这个方法试了以后也没用。

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-01 17:26
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这个问题可能是因为Java和C#使用的命名空间不同导致的。为了使两者能够正确地解析和处理对象,你需要确保在你的Java代码中使用与你的C#代码相同的命名空间。

    如果你的Java和C#代码都在同一个工程中,那么你可以在你的C#代码中通过以下方式设置Java的命名空间:

    using UserSyncData = YourJavaNamespace.UserSyncData;
    

    这将告诉你的C#代码如何从Java代码获取UserSyncData类型。

    如果你的Java和C#代码不在同一个工程中,你可以考虑创建一个独立的Java工程,并在其中定义UserSyncData类。然后,在你的C#代码中导入这个Java工程中的类。这样,当你需要从Java代码获取UserSyncData时,就可以直接使用这个类。

    例如,如果你的Java代码位于名为MyApp.java的文件中,你可以这样做:

    import com.example.MyApp;
    
    class MyApp {
        public static void main(String[] args) throws Exception {
            // 使用com.example.MyApp.UserSyncData
            MyApp.UserSyncData userSyncData = new MyApp.UserSyncData();
            // 使用UserSyncData.class.getPackage().getName()
            String packageName = UserSyncData.class.getPackage().getName();
            System.out.println(packageName);
        }
    }
    

    现在,当你的C#代码尝试访问UserSyncData时,它会找到MyApp.UserSyncData类,而不是com.example.MyApp.UserSyncData类。

    评论

报告相同问题?