Just in case someone is writing their portlet in a regular way, without tweaking Liferay, there's a relatively simple solution.
1. Create service using ServiceBuilder;
2. Create new package apart from your portlet and create an interface there with all service methods;
3. Use Apache Axis' Java2WSDL and WSDL2Java to create all soap classes and deploy.wsdd;
4. Find YourServiceSoapBindingImpl.java and write implementations for all methods to call corresponding YourServiceUtil methods, generated by ServiceBuilder;
5. Build this package and put it into tomcat/webapps/ROOT/WEB-INF/lib folder;
6. Take <service> tag from generated deploy.wsdd file and copy-paste it into tomcat/webapps/tunnel-web/WEB-INF/server-config.wsdd near other services;
7. Copy the jar generated with ServiceBuilder into tomcat/common/lib/ext;
8. Stop, then start tomcat, deploy your portlet;
9. Check http://localhost:8080/tunnel-web/axis for your service. It should be there.
This is too tricky, still. There has to be a way to execute 'build-wsdd' task and to generate all soap classes and wsdd files.
Please sign in to flag this as inappropriate.