公司的一个ftp文件上传功能的代码,看不懂求解释!!!

发布于 2021-12-01 16:19:28 字数 2800 浏览 675 评论 4

@Service("usdmFileService")
public class USDMFileServiceImpl extends AbstractService implements USDMFileService {
/**
	 * 上传
	 * 本地上传的附件,先上传至FTP,存表,上传至接口
	 * @param CommonFiles 文件存储表
	 */
	public void upLoad(CommonFiles commonFiles,String tempPath) throws ServiceException {
			log.info("上传附件开始!");
			UsdmService us = null;
			try {
				UsdmServiceService uss = new UsdmServiceService();
				us = uss.getUsdmServicePort();
			} catch (Exception e) {
				e.printStackTrace();
				log.info("请求超时");
				throw new ServiceException("请求超时");
			}
...
}


@WebService(name = "usdmService", targetNamespace = "http://service.usdm.ecm.nantian.com/")
@SOAPBinding(style = SOAPBinding.Style.RPC)
@XmlSeeAlso({
    ObjectFactory.class
})
public interface UsdmService {
    /**
     * 
     * @param arg0
     * @return
     *     returns com.nantian.ecm.usdm.service.Response
     */
    @WebMethod
    @WebResult(partName = "return")
    public Response upload(
        @WebParam(name = "arg0", partName = "arg0")
        Request arg0);
...
}



@WebServiceClient(name = "UsdmServiceService", targetNamespace = "http://service.usdm.ecm.nantian.com/", wsdlLocation = "http://10.1.39.30:8100/ECF/usdmService?wsdl")
public class UsdmServiceService
    extends Service
{
    /**
     * 
     * @return
     *     returns UsdmService
     */
    @WebEndpoint(name = "usdmServicePort")
    public UsdmService getUsdmServicePort() {
        return (UsdmService)super.getPort(new QName("http://service.usdm.ecm.nantian.com/", "usdmServicePort"), UsdmService.class);
    }
...
}


从上面的代码中可以看出uss调用了getUsdmServicePort();方法,然后就返回了UsdmService对象,并且调用该对象的upload方法,是可以上传文件的,也就是说javax.xml.ws.Service.getPort方法返回了一个us接口的实现类。

下面是service.getPort源码:

package javax.xml.ws;

public class Service {
...
    public <T> T getPort(QName portName,
            Class<T> serviceEndpointInterface) {
        return delegate.getPort(portName, serviceEndpointInterface);
    }
...
}



调用了ServiceDelegate的getPort方法,可是ServiceDelegate是抽象类该方法并没有实现。

public abstract class ServiceDelegate {
...
    public abstract <T> T getPort(QName portName,
            Class<T> serviceEndpointInterface);
...
}



我的问题是:service如果根据getPort方法,创建我所指定字节码文件的实现类的。

这是不是动态代理(我不懂)?求大神给个这方面类容的:书名,我好去自学一下,谢谢。



如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

韬韬不绝 2021-12-01 17:04:39

还有UsdmService类和方法上的注解有什么用吗?

坐在坟头思考人生 2021-12-01 17:04:39

确实用的都是webservice,你可以看下相关的知识,好久没写忘了都,相关的实现方法是在其他地方,只不过通过提供的远程接口来访问调用

囚你心 2021-12-01 17:04:14

还有那个USDM的缩写有什么含义吗?百度也查询不到相关的。

瀞厅☆埖开 2021-12-01 16:50:37

USDMFileService类的部分代码:

public interface USDMFileService {
...
	/**
	 * 上传
	 * 这个接口作用,本地数据库(TS_COMMONFILES)有存
	 * 平台上有的文件作为显示同步至本地,做为显示的主要依据
	 * @param CommonFiles 文件存储表
	 */
	public void upLoad(CommonFiles commonFiles,String tempPath) throws ServiceException;
...
}

这是在网上找到的相关内容:

三、使用axis1.4调用webservice方法
   前提条件:下载axis1.4包和tomcat服务器   ,并将axis文件夹复制到tomcat服务器的webapp文件夹中
   这里我就说一下最简单的方法:
         首先建立一个任意的java类(例如:HelloWorld.java),复制到axis文件夹下,将其扩展名改为jws,然后重新启动tomcat,在浏览器中输入http://localhost:8989/axis/HelloWorld.jws?wsdl,就会得到一个wsdl文件,其客户端调用方法如下:

import javax.xml.rpc.Service;
 import javax.xml.rpc.ServiceException;
 import javax.xml.rpc.ServiceFactory;
 
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.rmi.RemoteException;
 
 import javax.xml.namespace.QName;

public class TestHelloWorld {


    public static void main(String[] args) throws MalformedURLException, ServiceException, RemoteException {
        // TODO Auto-generated method stub
        
        String wsdlUrl ="http://localhost:8989/axis/HelloWorld.jws?wsdl";
        String nameSpaceUri ="http://localhost:8989/axis/HelloWorld.jws";
        String serviceName = "HelloWorldService";
        String portName = "HelloWorld";
        
        ServiceFactory serviceFactory = ServiceFactory.newInstance();
        Service afService =serviceFactory.createService(new URL(wsdlUrl),new QName(nameSpaceUri, serviceName));
        HelloWorldInterface proxy = (HelloWorldInterface)afService.getPort(new QName(nameSpaceUri, portName),HelloWorldInterface.class);
        System.out.println("return value is "+proxy.getName("john") ) ;
        
    }

}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文