L'envoi de message SOAP par Procuration en Java

J'ai besoin de savoir comment configurer un Proxy et confirmer qu'il fonctionne.

J'ai fait un programme de test qui ressemble à ceci:

L'envoi de message SOAP par Procuration en Java

Où vous pouvez spécifier une adresse de proxy et le numéro de port.

(J'ai trouvé l'adresse et le port sur:
http://www.freeproxylists.net/)

Le SAVON d'appel est à la recherche de ce genre quand "Utiliser un Proxy" est cochée:

        Socket socket = new Socket();
        SocketAddress sockaddr = new InetSocketAddress(PROXY_ADDRESS, PROXY_PORT);
        socket.connect(sockaddr, 10000);
        Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(socket.getInetAddress(), PROXY_PORT));
        URL url = new URL(urlStr);
        HttpURLConnection uc = (HttpURLConnection) url.openConnection(proxy);
        return connection.call(message, uc);

Problème ici est que la dernière ligne SOAPConnection.call(..) dose permettent pas HttpURLConnection comme entrée et donne ainsi:

Mauvais point de terminaison de type

Aucune idée de comment ajouter une adresse de proxy à un appel SOAP et vérifier que le proxy est en cours d'utilisation?

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.MalformedURLException;
import java.net.Proxy;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.URL;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPConnection;
import javax.xml.soap.SOAPConnectionFactory;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
public class TestProxy implements ActionListener {
public JTextField proxyField;
public JTextField portField;
public JCheckBox useProxy;
//GUI
public TestProxy() {
JFrame f = new JFrame("Proxy tester");
f.getContentPane().setLayout(new BoxLayout(f.getContentPane(), BoxLayout.Y_AXIS));
proxyField = new JTextField("103.247.43.218");
portField = new JTextField("8081");
useProxy = new JCheckBox("Use Proxy");
JButton b = new JButton("Connect!");
b.addActionListener(this);
f.getContentPane().add(proxyField);
f.getContentPane().add(portField);
f.getContentPane().add(useProxy);
f.getContentPane().add(b);
f.pack();
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
//ACTION
@Override
public void actionPerformed(ActionEvent e) {
SOAPMessage response = null;
try {
SOAPMessage msg = createSOAPRequest();
String urlStr = "http://www.webservicex.net/CurrencyConvertor.asmx?WSDL";
response = sendSOAPMessage(msg, urlStr);
} catch (MalformedURLException e1) {
e1.printStackTrace();
} catch (SOAPException e1) {
e1.printStackTrace();
} catch (Exception e2) {
e2.printStackTrace();
}
if (response == null)
JOptionPane.showMessageDialog(null, "Null returned...");
else
JOptionPane.showMessageDialog(null, "Returned response!!!");
}
//SOAP CALL
public SOAPMessage sendSOAPMessage(SOAPMessage message, String urlStr) throws SOAPException, MalformedURLException {
String PROXY_ADDRESS = proxyField.getText();
int PROXY_PORT = Integer.parseInt(portField.getText());
try {
SOAPConnectionFactory factory = SOAPConnectionFactory.newInstance();
SOAPConnection connection = factory.createConnection();
if (useProxy.isSelected()) {
Socket socket = new Socket();
SocketAddress sockaddr = new InetSocketAddress(PROXY_ADDRESS, PROXY_PORT);
socket.connect(sockaddr, 10000);
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(socket.getInetAddress(), PROXY_PORT));
URL url = new URL(urlStr);
HttpURLConnection uc = (HttpURLConnection) url.openConnection(proxy);
//This "call" is not allowed!!
return connection.call(message, uc);
} else {
return connection.call(message, urlStr);
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
//SOAP MESSAGE
private static SOAPMessage createSOAPRequest() throws Exception {
MessageFactory messageFactory = MessageFactory.newInstance();
SOAPMessage soapMessage = messageFactory.createMessage();
return soapMessage;
}
public static void main(String[] args) {
new TestProxy();
}
}

OriginalL'auteur Grains | 2014-01-28