Resume Parse Solution(1)Sovren and Axis2 SOAP Client
1. Commercial Solution
sovren
http://www.sovren.com/
Rchilli
http://rchilli.com/
HireAbility
http://www.hireability.com/
Daxtra
http://www.daxtra.com/
2. Open Source Solution
…todo...
3. Demo and Try SovRen
My lovely SOAP, I will use wsdl and SOAP again after 5 years...
Axis2
Install and Prepare Axis2
http://mirror.metrocast.net/apache//axis/axis2/java/core/1.6.3/axis2-1.6.3-bin.zip
unzip the file and find a nice place for that.
> wsdl2java.sh -help
Using AXIS2_HOME: /opt/axis2
Using JAVA_HOME: /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home
Usage: WSDL2Java [options] -uri <url or path> : A url or path to a WSDL
Here is the command to generate the codes
> wsdl2java.sh -uri http://services.resumeparsing.com/ParsingService.asmx?wsdl -S src/main/java/ -p com.sillycat.resumeparse.sovren.stub -t --noBuildXML -or
-uri URL of the wsdl file
-S source file location
-p customer package name
-t Generate the test Class (Not much use)
—noBuildXML No build the build.xml, because I am using maven
-or overwrite the file
Here is the dependencies in pom.xml
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.3</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2</artifactId>
<version>1.6.3</version>
</dependency>
<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2-transport-local</artifactId>
<version>1.6.3</version>
</dependency>
<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2-transport-http</artifactId>
<version>1.6.3</version>
</dependency>
<dependency>
<groupId>wsdl4j</groupId>
<artifactId>wsdl4j</artifactId>
<version>1.6.3</version>
</dependency>
<dependency>
<groupId>org.apache.ws.commons.axiom</groupId>
<artifactId>axiom-api</artifactId>
<version>1.2.15</version>
</dependency>
<dependency>
<groupId>org.apache.ws.commons.schema</groupId>
<artifactId>XmlSchema</artifactId>
<version>1.4.7</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
<dependency>
<groupId>org.apache.ws.commons.axiom</groupId>
<artifactId>axiom-impl</artifactId>
<version>1.2.15</version>
</dependency>
<dependency>
<groupId>org.apache.neethi</groupId>
<artifactId>neethi</artifactId>
<version>3.0.3</version>
</dependency>
Write the Implementation Class, ParsingServiceSovrenClient.java
package com.sillycat.resumeparse.sovren;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.rmi.RemoteException;
import java.util.zip.GZIPOutputStream;
import javax.activation.DataHandler;
import org.apache.axiom.attachments.ByteArrayDataSource;
import org.apache.axis2.AxisFault;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.sillycat.resumeparse.ParsingServiceClient;
import com.sillycat.resumeparse.sovren.stub.ParsingServiceStub;
import com.sillycat.resumeparse.sovren.stub.ParsingServiceStub.ParseResume;
import com.sillycat.resumeparse.sovren.stub.ParsingServiceStub.ParseResumeRequest;
import com.sillycat.resumeparse.sovren.stub.ParsingServiceStub.ParseResumeResponse;
import com.sillycat.resumeparse.sovren.stub.ParsingServiceStub.ParseResumeResponseE;
public class ParsingServiceSovrenClient implements ParsingServiceClient {
protected final static Log log = LogFactory
.getLog(ParsingServiceSovrenClient.class);
private String accountId;
private String serviceKey;
private String filePath;
private String soapServer;
public void parseResume(String fileName) {
long read_file_start = System.currentTimeMillis();
byte[] bytes = null;
try {
bytes = getBytesFromFile(new File(filePath + fileName));
} catch (IOException e) {
log.error(e,e);
}
long read_file_end = System.currentTimeMillis();
// Optionally, compress the bytes to reduce network transfer time
long gzip_file_start = System.currentTimeMillis();
try {
bytes = gzip(bytes);
} catch (IOException e) {
log.error(e,e);
}
long gzip_file_end = System.currentTimeMillis();
ByteArrayDataSource rawData = new ByteArrayDataSource(bytes);
DataHandler fileData = new DataHandler(rawData);
// Get a client proxy for the web service
ParsingServiceStub stub = null;
try {
if(this.getSoapServer() != null && !this.getSoapServer().equals("")){
stub = new ParsingServiceStub(this.getSoapServer());
}else{
stub = new ParsingServiceStub();
}
} catch (AxisFault e) {
log.error(e,e);
} catch(Exception e){
log.error(e, e);
}
// Required parameters
ParseResumeRequest request = new ParseResumeRequest();
request.setAccountId(this.getAccountId());
request.setServiceKey(this.getServiceKey());
request.setFileBytes(fileData);
ParseResume resumeRequest = new ParseResume();
resumeRequest.setRequest(request);
long call_api_start = System.currentTimeMillis();
ParseResumeResponse response = null;
try {
ParseResumeResponseE result1 = stub.parseResume(resumeRequest);
if (result1 != null) {
response = result1.getParseResumeResult();
}
} catch (RemoteException e) {
log.error(e,e);
}
long call_api_end = System.currentTimeMillis();
log.info("Load the file to Memory, using "
+ (read_file_end - read_file_start) + " ms");
log.info("Zip the file, using " + (gzip_file_end - gzip_file_start)
+ " ms");
log.info("Call the API, using "
+ (call_api_end - call_api_start) + " ms");
if (response != null) {
log.debug("--------------------------------");
log.debug("Code=" + response.getCode());
log.debug("SubCode=" + response.getSubCode());
log.debug("Message=" + response.getMessage());
log.debug("TextCode=" + response.getTextCode());
log.debug("CreditsRemaining=" + response.getCreditsRemaining());
log.debug("--------------------------------");
log.debug(response.getXml());
log.debug("--------------------------------");
}
}
private byte[] getBytesFromFile(File file) throws IOException {
InputStream is = new FileInputStream(file);
try {
// Get the size of the file
long length = file.length();
if (length > Integer.MAX_VALUE) {
// File is too large
}
// Create the byte array to hold the data
byte[] bytes = new byte[(int) length];
// Read in the bytes
int offset = 0;
int numRead = 0;
while (offset < bytes.length
&& (numRead = is.read(bytes, offset, bytes.length - offset)) >= 0) {
offset += numRead;
}
// Ensure all the bytes have been read in
if (offset < bytes.length) {
throw new IOException("Could not completely read file "
+ file.getName());
}
// Return the file content
return bytes;
} finally {
// Close the input stream
is.close();
}
}
private byte[] gzip(byte[] bytes) throws IOException {
ByteArrayOutputStream byteStream = new ByteArrayOutputStream(
bytes.length / 2);
try {
GZIPOutputStream zipStream = new GZIPOutputStream(byteStream);
try {
zipStream.write(bytes);
} finally {
zipStream.close();
}
return byteStream.toByteArray();
} finally {
byteStream.close();
}
}
}
Here is the Test Class, SovrenParsingServiceClientTest.java
package com.sillycat.resumeparse;
import junit.framework.Assert;
import org.junit.Before;
import org.junit.Test;
import com.sillycat.resumeparse.sovren.ParsingServiceSovrenClient;
public class SovrenParsingServiceClientTest extends BaseTest{
ParsingServiceClient parsingServiceClient;
@Before
public void setUp() {
parsingServiceClient = new ParsingServiceSovrenClient();
parsingServiceClient.setAccountId(“xxxxxxx");
parsingServiceClient.setServiceKey(“xxxxxxxx");
parsingServiceClient.setFilePath("/Users/carl/data/resume/");
}
@Test
public void dummy(){
Assert.assertTrue(true);
}
@Test
public void parseResume(){
parsingServiceClient.parseResume(“5-carl.pdf");
}
}
References:
http://resumeparsing.com/ResumeService.htm
http://resumeparsing.com/ParsingService.htm
Some SOAP Method
http://sillycat.iteye.com/blog/562769
http://sillycat.iteye.com/blog/1555080
http://sillycat.iteye.com/blog/978895
http://sillycat.iteye.com/blog/716791
http://sillycat.iteye.com/blog/706076
http://sillycat.iteye.com/blog/562769
http://help.eclipse.org/mars/index.jsp?topic=%2Forg.eclipse.jst.ws.cxf.doc.user%2Ftasks%2Fcreate_client.html
Three popular SOAP provider
http://projects.spring.io/spring-ws/
http://axis.apache.org/axis2/java/core/download.cgi
http://cxf.apache.org/download.html
Async SOAP Client
http://downloads.typesafe.com/rp/play-soap/PlaySoapClient.html
https://www.playframework.com/documentation/3.0.x/ScalaWS
https://github.com/vmencik/soap-async
JAX-WS WSDL
http://www.mkyong.com/webservices/jax-ws/jax-ws-wsimport-tool-example/
http://www.mkyong.com/webservices/jax-ws/jax-ws-hello-world-example/
Resume Parse Solution(1)Sovren and Axis2 SOAP Client
猜你喜欢
转载自sillycat.iteye.com/blog/2229813
今日推荐
周排行