jsp网站开发软件,导航网站前端模板,wordpress 设置图片大小,企业网站优化暴肃湖南岚鸿很好最近项目对接过程中#xff0c;因为对方系统比较旧#xff0c;我们和对方进行交互使用webservice方式进行#xff0c;对方给出相关文档#xff0c;
接口地址#xff1a;http://ip:port/abc/def/xxxService?wsdl
接口名称#xff1a;methodA
1-springboot配合CXF使用 …最近项目对接过程中因为对方系统比较旧我们和对方进行交互使用webservice方式进行对方给出相关文档
接口地址http://ip:port/abc/def/xxxService?wsdl
接口名称methodA
1-springboot配合CXF使用
由于接口的ip是内网地址我们业务服务器出去我们必须中转到一台可以打通内网ip的机器A上才能请求。首先我们使用内网穿透工具ngfork在A上部署一个中转应用。
大概流程如下 Java核心代码如下
pom引入依赖 parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.3.1.RELEASE/versionrelativePath//parentdependenciesdependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion1.16.18/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.apache.commons/groupIdartifactIdcommons-lang3/artifactIdversion3.8/version/dependency!-- https://mvnrepository.com/artifact/com.sun.xml.ws/jaxws-ri --dependencygroupIdcom.sun.xml.ws/groupIdartifactIdjaxws-ri/artifactIdversion2.3.3/versiontypepom/type/dependency!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator --dependencygroupIdorg.hibernate.validator/groupIdartifactIdhibernate-validator/artifactIdversion6.2.0.Final/version/dependency!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web-services --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web-services/artifactId/dependency!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-spring-boot-starter-jaxws --dependencygroupIdorg.apache.cxf/groupIdartifactIdcxf-spring-boot-starter-jaxws/artifactIdversion3.4.3/version/dependency!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-transports-http --dependencygroupIdorg.apache.cxf/groupIdartifactIdcxf-rt-transports-http/artifactIdversion3.4.3/version/dependencydependencygroupIdcom.alibaba/groupIdartifactIdfastjson/artifactIdversion2.0.30/version/dependency/dependencies 核心java代码如下
JaxWsDynamicClientFactory dcf JaxWsDynamicClientFactory.newInstance();
Client client dcf.createClient(接口地址);
Object[] objects client.invoke(接口名称, reqStr);
objects就是对方返回的结果。
这种情况直接使用ip完全没有问题如下使用域名会出现如下错误
org.apache.cxf.interceptor.Fault: Response was of unexpected text/html ContentType. Incoming portion of HTML stream: html headtitle301 Moved Permanently/title/head body centerh1301 Moved Permanently/h1/center hrcenternginx/1.22.1/center /body /html 2-使用AXIS请求
上面使用frps进行时使用域名会出现以上错误我们更换一种请求方式就可以获取到结果。方式二直接需要一台公网服务器部署frps需要域名然后在中转机上不是frpc客户端配置相关内容不需要部署一个服务直接域名穿透过去。
pom依赖 dependencygroupIdorg.apache.axis/groupIdartifactIdaxis/artifactIdversion1.4/version/dependencydependencygroupIdorg.apache.axis/groupIdartifactIdaxis-jaxrpc/artifactIdversion1.4/version/dependencydependencygroupIdcommons-logging/groupIdartifactIdcommons-logging/artifactIdversion1.2/version/dependencydependencygroupIdcommons-discovery/groupIdartifactIdcommons-discovery/artifactIdversion0.5/version/dependencydependencygroupIdwsdl4j/groupIdartifactIdwsdl4j/artifactIdversion1.5.2/version/dependency
核心java代码
//服务地址String url https://xxx.com/abc/def/xxxService?wsdl;//命名空间String namespaceURI XMLConstants.NULL_NS_URI;//方法名String method yourMethod;try {Service service new Service();Call call (Call) service.createCall();call.setTargetEndpointAddress(url);//设置要调用的方法call.setOperationName(new QName(namespaceURI, method));//设置要返回的数据类型call.setReturnType(new QName(namespaceURI, method), String.class);call.setUseSOAPAction(true);call.setSOAPActionURI(namespaceURI method);//设置入参call.addParameter(new QName(namespaceURI, params), Constants.XSD_STRING, javax.xml.rpc.ParameterMode.IN);//调用方法并传递参数String resultStr (String) call.invoke(new Object[]{{\name\:\zhangsan\,\pwd\:\abc123456\}});System.out.println(服务调用结果 resultStr);} catch (Exception e) {e.printStackTrace();}
使用方式二就没有出现方式一的301错误。问题解决。